Windows の終了(シャットダウン)、再起動、ログオフするには次の手順で行います。(戻る)
- 終了、再起動、ログオフさせるために SE_SHUTDOWN_NAME 特権を有効にする(ProcessPrivilegeName)
- 終了、再起動、ログオフさせるAPIを呼び出す(ExitWindowsEx)
Windows 95/98/Me では(1)の特権を有効にする必要はありません。
プロトタイプ宣言
HANDLE GetCurrentProcess( VOID ); BOOL ExitWindowsEx( UINT uFlags, // シャットダウン操作 DWORD dwReserved // 予約済み );
サンプル
#include <stdio.h> #include <windows.h> // メイン関数 int main( void ) { UINT uFlag = 0; UINT uMenu; do { printf( TEXT("\n") ); printf( TEXT("1...ログオフ\n") ); printf( TEXT("2...パワーオフ\n") ); printf( TEXT("3...再起動\n") ); printf( TEXT("4...シャットダウン\n") ); scanf( TEXT("%d"), &uMenu ); switch ( uMenu ){ case 1: uFlag = EWX_LOGOFF; break; case 2: uFlag = EWX_POWEROFF; break; case 3: uFlag = EWX_REBOOT; break; case 4: uFlag = EWX_SHUTDOWN; break; default: uMenu = 0; break; } } while ( uMenu == 0 ); // Windows NT 系のために SE_SHUTDOWN_NAME 特権を有効にする ProcessPrivilegeName( GetCurrentProcess(), SE_SHUTDOWN_NAME, TRUE ); // ログオフ/パワーオフ/再起動/シャットダウンを実行する ExitWindowsEx( uFlag, 0 ); return 0; }
- Windows 95/98/Me では SE_SHUTDOWN_NAME 特権を有効にする必要はありません。
- Windows 95/98 ではコンソール・アプリケーションから ExitWindowEx 関数を呼び出しても失敗します。
- ProcessPrivilegeName 関数は前回紹介した自作関数です。(API関数ではありません)
補足情報
- EWX_FORCE 定数をフラグに追加すると強制的にログオフ/パワーオフ/再起動/シャットダウンを行えます。
- なお、本当に強制的に終了するのでアプリケーションで、まだ保存されていないデータは失われます。
関連記事
- 指定した特権名の有効/無効
- Windows の終了/再起動/ログオフ
- Windows の休止状態/スタンバイ
- コンピュータのロック
- [HSP]シャットダウンの命令群
※コメント投稿者のブログIDはブログ作成者のみに通知されます