以前有介紹如何使用命令行調用系統的關機對話框rundll32.exe shell32.dll #60,但是,上述方法會存在一問題,XP下無法正常使用該方法進行關機
以前有介紹如何使用命令行調用系統的關機對話框:
具體方法:開始/運行:
代碼如下:
rundll32.exe shell32.dll #60
但是,上述方法會存在一問題,XP下無法正常使用該方法進行關機(感謝網友沐燁 發現該問題)。問題原因可能是:正常情況下,關機對話框是有explorer.exe調用,直接使用rundll32調用時無法觸發相關命令。
既然使用explorer.exe調用可以,我們可以嘗試使用腳本來實現。實現原理:
激活explorer.exe
按ALT+F4
編寫VBS腳本如下(將下述內容另存為shutdown.vbs):
代碼如下:
Dim objWMI,wsh
Dim colProcesses,objProcess
pid=0
set objWMI = GetObject( "winmgmts:{impersonationLevel=impersonate}//. /root/cimv2" )
set colProcesses = objWMI.ExecQuery( "SELECT * FROM Win32_Process" & _
" WHERE Name='explorer.exe'" )
for Each objProcess In colProcesses
pid = objProcess.ProcessId
Next
set wsh = WScript.CreateObject("WScript.Shell")
wsh.AppActivate pid
wsh.sendKeys "%{F4}"
上述腳本運行環境為:XP SP2
其他環境也可能正常工作,不過對于有多個explorer.exe進程的系統,就可能不正常工作了,如開了遠程終端服務的多用戶環境下。