終了時の手間を減らす
(1)デバイスを無効にする。(2)シャットダウン・再起動する。これらの作業をコマンドプロンプトで実行すると、次のようになる。
- devcon disable "@PCI\VEN_xxxx&DEV_xxxx&SUBSYS_xxxxxxxx&REV_xx\x&xxxxxxx&x&xx"
- : shutdown -r -t 0(再起動の場合)
しかし、この2行をバッチファイルに書いても、うまくいかない。(1)の作業が完了してから、(2)の作業をしなくてはならない。
こちらのサイトなどを参考して、次のような形式にすればよさそうだということまでは分かった。
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\BAT\OFF.bat"
If MsgBox(strMsg, vbOKCancel, "再起動しますか?") = vbOK Then
[再起動]or[シャットダウン]
Else
Wscript.Quit
End If
[再起動]or[シャットダウン]の箇所に、こちらのサイトにあるrestart.vbsとshutdown.vbsの記述を当該箇所に貼りつける。
当該箇所にrestart.vbsの記述を貼りつけたファイルを「Restart.vbs」として、スタート・フォルダに入れておく。当該箇所にshutdown.vbsの記述を貼りつけたファイルを「Shutdown.vbs」として、スタート・フォルダに入れておく。
SoundOn.vbsはバックグラウンドで動作するように記述しておいたが、Shutdown.vbsとRestart.vbsは作業の進行状況が分かるような記述にしておくこと(3行目)。そうすると、スタートメニューから「Shutdown.vbs」ないし「Restart.vbs」を選択した後、 OFF.batの作業が終了したことを確認してから、「OK」をクリックして、シャットダウンないし再起動できる。
Shutdown.vbs
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\BAT\OFF.bat"
If MsgBox(strMsg, vbOKCancel, "シャットダウンしますか?") = vbOK Then
Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem")For Each objSystem In objSystemSet
objSystem.Win32Shutdown 8
Next
Else
Wscript.Quit
End If
Restart.vbs
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\BAT\OFF.bat"
If MsgBox(strMsg, vbOKCancel, "再起動しますか?") = vbOK Then
Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem")For Each objSystem In objSystemSet
objSystem.Win32Shutdown 2
Next
Else
Wscript.Quit
End If<<