Windows2000のシャットダウン時に終了処理としてiniファイルの情報を更新してアプリケーションを終了させるソフトを作っています。
通常時、スタートメニューからシャットダウンした場合は、
シャットダウン時にOSが出すWM_QUERYENDSESSION、WM_ENDSESSIONのメッセージを受けて終了処理を行うようにしてできたのですが、
UPS(無停電電源)からの信号でシャットダウンされた場合うまくメッセージを受けられません。
スタートメニューから終了させた時と違ってUPSで終了した場合「コンピュータの電源を切ることができます」というメッセージが出て終了するのですが、この場合はWM_QUERYENDSESSION、WM_ENDSESSIONは来ないのでしょうか?または何か別のメッセージが出るということであれば教えて頂けると助かります。
USPはユタカ電機製で実際にシャットダウンを行うのはFelisafeLiteという停電検出ソフトです。
(FelisafeLiteが何か特別な処理をしている可能性もあるのですが・・・)
何かご存知の方がいましたら教えてください。よろしくお願い致します。
他社のUSPを2,3社使ってますが、いずれもAPにWM_QUERYENDSESSIONを投げて終了するAPを別途作成し、停電検出ソフトの検出時の処理でそのAPを起動するようにしています(シャットダウンまでの時間はAPが終了できる時間分調整)。
みいさん
早速の回答ありがとうございます。
みいさんもそういった対応を取られているということはUPSでシャットダウンされる時はWM_QUERYENDSESSIONが来ないというのは確定なのでしょうか?
その確証が取れるだけでもありがたいです。
みいさんがやられている方法に近いですが、FelisafeLiteにアプリを登録しておくと、シャットダウン開始時にイベント通知してくれるようなので、
その方法も並行して検討しています。
まあ、UPSの場合は各APにWM_QUERYENDSESSION投げて「終了できませんよ」って返されても困りますからねえ。
Windows終了最優先になっているのでしょう。
WM_QUERYENDSESSIONがくるのは「ユーザー操作による終了」か「APからExitWindows関数が呼ばれた場合」になっています。
みいさん
情報ありがとうございました。
WM_QUERYENDSESSIONは当てにせず処理する方法で考えることにします。
解決にチェック入れるの忘れました。すみません。
ExitWindowsEx 時に EWX_FORCE フラグを立てると、WM_QUERYENDSESSION も WM_ENDSESSION も来ません。
ツイート | ![]() |