如何在 Windows 7 上鎖定螢幕時自動退出程式?

如何在 Windows 7 上鎖定螢幕時自動退出程式?

有沒有辦法在 Windows 7 上鎖定螢幕時自動退出程式?

答案1

根據grarity的建議,不要使用我放置的批次文件在這個答案的最後。這是因為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

相關內容