使用批處理重新啟動電腦

來源:互聯網
上載者:User
 導讀:

今天在新聞群組看到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.htmlsetupapi在這裡載入 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> 是一個組合值,它的組合序列如下:

Value Description
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.