終了して欲しくないタイミングでOSがシャットダウンされるのを防ぐ方法。

シャットダウン前に、シャットダウン可能かの問合せメッセージ
 WM_QUERYENDSESSION

シャットダウン処理実施のメッセージ
 WM_ENDSESSION

シャットダウン処理の順番を変更する
 SetProcessShutdownParameters()

OSがシャットダウン処理(ログオフも)を始めると、 開いているアプリケーションに対してWM_QUERYENDSESSIONメッセージを送る。 このメッセージを受け取った時に、FALSEを返すとOSはシャットダウン処理を中止する。 その後、各アプリケーションに対し、OSからWM_ENDSESSIONメッセージが、wParam=0で送信され、 シャットダウン処理が中止された ことが通知される。

しかし、メッセージが送られる順番はOSがコントロールしているため、 他のアプリが先に終了してしまう事がある。

それを防ぐために、SetProcessShutdownParameters()でシャットダウンする順番を早くしておく。 それによって、他のアプリよりも先にWM_QUERYENDSESSIONメッセージを受け取り、 中断することができる。 (ただし、同じ優先順位のアプリが他にもある場合は、 先にどちらにメッセージが送られるかはわからない。)

最終更新:2013年05月02日 09:23