使用脚本调用系统的关机对话框

来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:27:59
使用脚本调用系统的关机对话框 收藏
以前有介绍如何使用命令行调用系统的关机对话框:http://blog.csdn.net/scz123/archive/2005/09/30/492991.aspx
具体方法:开始/运行: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进程的系统,就可能不正常工作了,如开了远程终端服务的多用户环境下。
发表于 @ 2008年01月14日 12:17:00 | 评论( 1 ) | 编辑| 举报| 收藏
旧一篇:我在显示器里养了条小鱼 | 新一篇:SVCHOST错误对话框(SVCHOST.exe 26777)
查看最新精华文章 请访问博客首页相关文章 netfound 发表于2008年1月15日 15:14:19  IP:举报回复删除
我是下面这么写:
------------------------------------------------------------
dim delay
delay = inputbox("输入要延迟多长时间关机(单位:分)","定时关机小脚本 By netfound","10")
if isNumeric(delay) and delay>=0 Then
WScript.Sleep(delay*60*1000)
dim cmd : set cmd = CreateObject("Wscript.Shell")
cmd.run("shutdown /s /t 0")
set cmd = Nothing
End If
-------------------------------------------------------发表评论
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/scz123/archive/2008/01/14/2043143.aspx