終了時の手間を減らす

(1)デバイスを無効にする。(2)シャットダウン・再起動する。これらの作業をコマンドプロンプトで実行すると、次のようになる。

  1. devcon disable "@PCI\VEN_xxxx&DEV_xxxx&SUBSYS_xxxxxxxx&REV_xx\x&xxxxxxx&x&xx"
  2. : 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<<