Windowsを終了させるには、ExitWindowsExを使用する。
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReserved // reserved
);
※MSDNライブラリより引用uFlagsには、以下のフラグを使用する
EWX_LOGOFF:ログオフ
EWX_POWEROFF:(シャットダウン後)電源OFF
EWX_REBOOT:再起動
EWX_SHUTDOWN:シャットダウンまた、EWX_FORCEを併用することでシャットダウンの強制実行が可能となる。
通常のシャットダウンでは、シャットダウン前にWM_QUERYENDSESSIONが各アプリケーションに送信される。アプリケーションはそれに対して、シャットダウンを了承するか拒否するか返さなければならない(デフォルトプロシージャでは了承される)。全てのアプリケーションがシャットダウンを了承した場合、WM_ENDSESSIONを送信し、シャットダウン処理へ移行する。
EWX_FORCEは、WM_QUERYENDSESSIONやWM_ENDSESSIONを省略し、即座にシャットダウン処理へ移行する。アプリケーションによっては、WM_QUERYENDSESSIONにより、ファイルを保存するか問い合わせてくるものもある(Excel等)ため、EWX_FORCEの使用には注意が必要である。また、スタンバイ・休止状態に移行するには、SetSystemPowerStateを使用する。
BOOL SetSystemPowerState(
BOOL fSuspend,
BOOL fForce
);
※MSDNライブラリより引用MSDNライブラリでは、fSuspendはIgnoreとなっているが、私の環境で確認した限りでは、fSuspend=TRUEでスタンバイへ、fSuspend=FALSEで休止状態となるようである(休止状態を有効にしていない場合はスタンバイになり、fSuspendはIgnore)。
fForceは、ExitWindowsExとほぼ同じ意味であり、PBT_APMQUERYSUSPEND・PBT_APMSUSPEND の送信を省略するものである。なお、MSDNライブラリにもあるが、WindowsNT(2000/XP/2003他)で、シャットダウンを行うためには、特権が必要となる。
投稿者 NMVL : 2004年3月17日 15:55