終了して欲しくないタイミングでOSがシャットダウンされるのを防ぐ方法。
シャットダウン前に、シャットダウン可能かの問合せメッセージ WM_QUERYENDSESSION シャットダウン処理実施のメッセージ WM_ENDSESSION シャットダウン処理の順番を変更する SetProcessShutdownParameters()
OSがシャットダウン処理(ログオフも)を始めると、 開いているアプリケーションに対してWM_QUERYENDSESSIONメッセージを送る。 このメッセージを受け取った時に、FALSEを返すとOSはシャットダウン処理を中止する。 その後、各アプリケーションに対し、OSからWM_ENDSESSIONメッセージが、wParam=0で送信され、 シャットダウン処理が中止された ことが通知される。
しかし、メッセージが送られる順番はOSがコントロールしているため、 他のアプリが先に終了してしまう事がある。
それを防ぐために、SetProcessShutdownParameters()でシャットダウンする順番を早くしておく。 それによって、他のアプリよりも先にWM_QUERYENDSESSIONメッセージを受け取り、 中断することができる。 (ただし、同じ優先順位のアプリが他にもある場合は、 先にどちらにメッセージが送られるかはわからない。)