Visual Basicアプリケーションから、Windowsの終了を制御するには、_ ExitWindowsEx関数を使用します。
この関数は、Windowsの終了や再起動、ユーザーのログオフを制御できます。 こういった処理は、アプリケーションのセットアップ終了後等に使用します。 プロセスの強制終了も指定できますが、通常指定すべきではありません。
(ExitWindowsEx 関数等の使用方法)
まずフォームのGeneralセクションに次の宣言コードを追加して下さい
次に、フォームにCommandButtonを2つ配置して、 Command1_Click(),Command2_Click()プロシージャに次のコードを追加して下さい。
'APIの宣言
'=========================================================== 'ExitWindowsEx Windowsの終了を制御 '=========================================================== Private Declare Function ExitWindowsEx Lib "user32" (ByVal _ uFlags As Long, ByVal dwReserved As Long) As Long '-----------------------引数-------------------------------- '(uFlags) 制御の指定。以下のどれか '現在のユーザーをログオフ Private Const EWX_LOGOFF = 0& '電源を切っても大丈夫な状態にする Private Const EWX_SHUTDOWN = 1& 'システムを再起動 Private Const EWX_REBOOT = 2& '他のアプリケーションのプロセスを強制的に終了 Private Const EWX_FORCE = 4& '(dwReserved) 予約 '----------------------戻り値------------------------------- '関数が成功すると、0 以外の値が返り、 '関数が失敗すると、0 が返る
'再起動 Private Sub Command1_Click() Dim msg As String msg = "Windowsを終了し、再起動します" & Chr(10) & _ "よろしいですか?" If MsgBox(msg, vbInformation + vbYesNo, "Windowsの終了") _ = vbYes Then Call ExitWindowsEx(EWX_REBOOT, 0&) End If End SubCommand1をクリックすれば、システムをシャットダウンして再起動します。 この時他のプロセスで、編集されているものについて保存するかどうかの確認 のダイアログが表示されますが、システムのシャットダウンをやめることは できません。
'終了 Private Sub Command2_Click() Dim msg As String msg = "Windowsを終了します" & Chr(10) & _ "よろしいですか?" If MsgBox(msg, vbInformation + vbYesNo, "Windowsの終了") _ = vbYes Then Call ExitWindowsEx(EWX_SHUTDOWN, 0&) End If End Sub
Command2をクリックすれば、システムを終了します。この時も上と同様な 手順を踏んだあと、システムを電源を切れる状態にします。
ExitWindowsEx関数の1つ目の引数に、EWX_FORCE Or WX_SHUTDOWNの ようにEWX_FORCEとともに指定すると、現在実行中の他のプロセスが強制的に 終了します。