[VBScript] PCをスタンバイにする
2012年 06月 16日
VBScriptから、PCをスタンバイにする方法。他にもシャットダウン、再起動なども可能。
ただし、実行には管理者権限が必要。まぁフツー管理者で使うから問題ないだろ。
Set objWS = CreateObject("WScript.Shell")
' スタンバイ
objWS.Run "rundll32 powrprof.dll,SetSuspendState"
' 休止状態
objWS.Run "rundll32 powrprof.dll,SetSuspendState Hibernate"
' シャットダウン
objWS.Run "shutdown -s"
' 再起動
objWS.Run "shutdown -r"
' ログオフ
objWS.Run "shutdown -l"
上記のやり方では、休止状態が有効になっている場合、スタンバイにはならない。(SetSuspendState関数に引数を指定してないため)
ExcelがインストールされているPCならば、以下の方法でスタンバイに移行できる。
Set objExcel = CreateObject("Excel.Application")
' スタンバイ
cmd = "CALL(""powrprof.dll"",""SetSuspendState"",""JJJJ"",0,0,0)"
' 休止状態
cmd = "CALL(""powrprof.dll"",""SetSuspendState"",""JJJJ"",1,0,0)"
objExcel.ExecuteExcel4Macro(cmd)
objExcel.Quit ' QuitしないとExcelプロセスが残るため
管理者権限がない場合はこっち。こっちで使うSendKeysは、キーボード入力をスクリプトで再現するもの。
入力したキーは再前面のウィンドウが拾うので、PCを操作してたらうまく動かんかもしれん。
' タスクマネージャーを起動
Set objWS = CreateObject("WScript.Shell")
objWS.SendKeys "^+{esc}"
Do While Not objWS.AppActivate("Windows タスク マネージャ")
WScript.Sleep 100 ' タスクマネージャー起動待ち
Loop
WScript.Sleep 100
' ショートカットキーを送信
objWS.SendKeys "%ub%fx" ' スタンバイ
objWS.SendKeys "%uh%fx" ' 休止状態
objWS.SendKeys "%uu%fx" ' シャットダウン
objWS.SendKeys "%ur%fx" ' 再始動
objWS.SendKeys "%ul%fx" ' ログオフ

