如何在 Windows 7 上锁定屏幕时自动退出程序?

如何在 Windows 7 上锁定屏幕时自动退出程序?

有没有办法在我锁定屏幕时自动退出 Windows 7 上的程序?

答案1

根据 Grawity 的建议,不要使用我放的批处理文件在本答案的最后。这是因为rundll32.exe 才不是匹配 Win32 API 函数的调用约定LockWorkStation(参见此 MSDN 博客条目有关详细信息)。话虽如此,还有一个更好的选择,而且不需要做太多的工作。

您可以使用AutoIt 脚本语言DllCall函数来调用 Win32 API 函数而不会破坏调用堆栈。您还可以使用ProcessClose而不是TASKKILL。供您参考,这里是LockWorkStation参考自MSDN。

将以下两行放入一个文件中,并将其另存为exitandlock.au3(或类似名称)。然后您可以使用 AutoIt 运行它(或者如果您愿意,甚至可以将其编译为 .exe)。

ProcessClose("yourapp.exe")
DllCall("user32.dll", "BOOL", "LockWorkStation")

这应该能满足您的需求,而不会破坏调用堆栈。然后,您可以将该文件绑定到热键并使用它来锁定您的工作站。或者,您可以将其编译为 .exe 文件,并将其设置为在计算机不活动后作为计划任务运行。

最后,您可能还想使用WinClose作为 的替代功能ProcessClose


正如我所说,请不要使用此方法。我将其保留在这里只是为了完整性,因为这是互联网上最广泛使用的方法之一。您可以使用以下命令使用简单的批处理文件来执行此操作TASKKILL

@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation

然后,当您想要锁定工作站时,只需运行批处理文件即可。或者,您也可以分配一个热键来执行批处理文件,然后当您想要锁定它时,只需按下该组合键即可。有关命令的更多详细信息TASKKILL,请参阅这篇文章来自微软

答案2

步骤 1:编写终止程序的脚本

创建一个名为terminate.vbs以下内​​容的文件:

set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
strprocessname = wscript.arguments.item(0)
strquery = "select * from win32_process where name='" & strprocessname & "'"
set colitems = objwmiservice.execquery(strquery,,48)
for each objitem in colitems
    objitem.terminate
next

通过打开命令提示符并执行来测试此脚本cscript.exe "C:\path\to\terminate.vbs" notepad.exe。将其替换notepad.exe为您要终止的进程名称。

第 2 步:安排脚本在锁定屏幕时运行

打开任务计划程序(您可以在“开始”菜单中搜索它),右键单击任务计划程序库并选择创建任务.... 在一般的选项卡,为您的任务提供名称和描述。您可以更改配置为:Windows 7、Windows Server 2008 R2如果你愿意的话,但那不是必需的。

创建任务 - 常规选项卡

触发器选项卡,创建新触发器并设置开始任务:工作站锁定. 其余默认设置即可。

创建任务 - 新触发器

操作选项卡,创建一个新的操作,启动程序程序/脚本:应该脚本文件terminate.vbs.在添加参数(可选):框。我的论点是"C:\Users\Public\Documents\terminate.vbs" notepad.exe

创建任务 - 新动作

您可以检查状况设置选项卡以获得更多选项,但这些选项在这里都不是必需的。保存任务,您就完成了。锁定屏幕后,该过程应终止。

请注意,如果您锁定屏幕然后快速解锁,您可能会看到命令提示符窗口或您想要终止的进程仍在终止过程中。这取决于进程正常终止所需的时间。

答案3

您可以编写一个程序来WTSRegisterSessionNotification()等待WTS_SESSION_LOCK活动并做必要的事情。

可以在此处找到示例:https://superuser.com/a/264973/1686

相关内容