使用批处理重新启动计算机

 导读:

今天在新闻组看到suichuanxian朋友回了一个帖子(地址在 OXfUmTgWFHA.2256@TK2MSFTNGP14.phx.gbl ),帖子原文如下:提问:请问各位大虾,在批处理里面怎么模拟回车键的事件?也就是说我想用批处理来代替人
工的回车或者空格键?因为我的一些程序在关闭的时候,提示是否结束,如果选在
“是”以后,程序关闭了,
系统 才能够成功重启,否则不理他的话,系统就不能够完成
重启的动作。谢谢各位大虾。
回答:把以下内容用记事本保存为bat文件就可以了,如reboot.bat,运行它就会自动重新启
动。

@echo off
setlocal
cd/d %temp%
echo [version] > reboot.inf
set inf=InstallHinfSection DefaultInstall
echo signature=$chicago$ >> reboot.inf
echo [defaultinstall] >> reboot.inf
rundll32 setupapi,%inf% 1 %temp% eboot.inf
del reboot.inf
呵呵,看到这个帖子,又让我回想起用inf解锁regedit风行的年代。意兴之余就说说这个
脚本 的原理好了。其实这里面用到的关键一句是RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 1 %temp% eboot.inf这里的格式是RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection 关于Windows Rundll and Rundll32 Interface的用法,请参考 http://support.microsoft.com/kb/164787/zh-cn  ,之前我也写过rundll32用法的一个例子 http://gnaw0725.blogdriver.com/gnaw0725/259894.html setupapi在这里加载 InstallHinfSection功能项。关于此api其他export部分,用exescope或者编译工具都可以很容易查到。(BTW:在winXP及以后版本,setupapi的运行将会随之产生一个setupapi.log,它将会纪录当前环境下安装的设备、servicepack以及hotfix,详细内容请参考 http://www.microsoft.com/whdc/driver/install/setupapilog.mspx )<section> 这里配合INF使用 InstallHinfSection, 关于 INF安装的其他功能项请参考 INF File Processing Functions http://msdn.microsoft.com/library/default.asp?url=/library/en-us/install/hh/install/SetupAPI_95233d19-2970-409d-8b44-de661cbf68ae.xml.asp <mode> 是一个组合值,它的组合序列如下:
ValueDescription
0系统提供INF
128将安装文件的缺省路径设置为当前INF路径。此为典型设置。
+0不重新启动计算机
+1所有情况下都重新启动计算机
+2如果需要重新启动,始终询问用户
+3如果必要不经用户许可直接重新启动计算机
+4如果需要重新启动计算机,在启动前提交用户许可
< path> 指定INF文件的路径,这里要使用绝对路径。 这个用法适用于几乎所有的客户端操作系统,但这里的 < mode> 一般不推荐赋值为 1 ,应该写为 128+1=129 ,否则可能在某些环境下执行出现问题,不会重新启动。这里既然说到重新启动系统,其实还可以用vbs来做,也只用一句话就够了CreateObject("WScript.Shell").SendKeys "^{ESC}ur"但一般不推荐这样写,因为winxp登录方式有欢迎屏幕,也有非欢迎屏幕的登陆,对于后者这样写就不管用了,就要这样写CreateObject("WScript.Shell").SendKeys "^{ESC}u{DOWN}~"这里有点技巧的就是 SendKeys,关于 SendKeys的用法,请参考 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemwindowsformssendkeysclasssendtopic.asp ,这里就不详述了。之前我也曾写过一个类似的例子,见于 http://gnaw0725.blogdriver.com/gnaw0725/358142.html但由于windows注册键值对于上次关机状态的记忆,连这个按键的顺序也未必如此,所以除非您为特定的环境定制的脚本,一般对于通用的环境建议还是老老实实来strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Shutdown)}!" & _
        strComputer & " ootcimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
    objOperatingSystem.Reboot()
Next

本文转自
http://gnaw0725.blogbus.com/logs/4888543.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值