TIPSWindwosのシャットダウン一般的にWindowsをシャットダウン、リブート、ログオフするにはExitWindowsExを使用します。ExitWindowsEx()の第一引数に種類を指定することで、シャットダウン、リブート、ログオフができます。Windows95,98の場合は単純にこの関数を呼び出すだけで目的の動作をすることができます。WindowsNT,Windows2000などNT系のOSではこの関数を呼び出すだけでは、ログオフはできますが、シャットダウン、リブートはうまくいきません。その理由はヘルプを見れば書いてあります。特権を持っていなければなりません。」さて、またわかりにくいですね。すれば、この特権をもつことができるのでしょうか。そこで、「参照」の欄をみると、AdjustTokenPrivileges,HandlerRoutine,SetConsoleCtrlHandlerなどの関数が書いてあります。この最初のAdjustTokenPrivilegesが今回は関係があります。指定したアクセストークン内のSE_SHUTDOWN_NAME特権を有効しろということです。よって以下のようになります。ここではエラー処理その他は行っていません。Windows98などでは特権関係の関数は呼び出すことはできますが、エラーになりますので、バージョンなどを見分けて呼び分けましょう。CloseHandle(hToken);}-----また、この他にもWindowsNTでしか使用できませんが、InitiateSystemShutdownというAPIもあります。これは、シャットダウンをユーザに知らせるメッセージを出すこと、シャットダウンの中断、シャットダウンまでの時間の指定したりすることができます。上記コードのExitWindowExを呼び出しているところでこのAPIを呼び出せばOKです。---上のプログラムを使用したシャットダウンプログラムです。(ご利用者が本ソフトウェアを使用した結果において、当方は一切の責任を負いません。)(また、シャットダウンはアクセス中のファイルを正しく閉じずにWindowsを終了してしまう場合もあるため、システムに重大な損害を与える場合があります。プログラムについての注意を追加。ExitWindowEx版とInitiateSystemShutdown版の両方を用意。m-nishikawa@nifty.comまで。