2009-08-06 24 views

答えて

6

これを確認する実際のWin32関数はありません。

代わりに、シャットダウンが開始されると、WindowsはWM_QUERYENDSESSIONメッセージをすべてのアプリケーションに送信します。

このメッセージに応答して、たとえばシャットダウンをキャンセルできます。 (絶対に必要な場合を除き、これを行うべきではありませんが)

実際のシャットダウンの前に、WM_ENDSESSIONメッセージが送信されます。

WM_QUERYENDSESSIONの後に実際にシステムがシャットダウンすることが保証されていないため、このメッセージの後にのみクリーンアップを実行する必要があります。

編集: サービスからこれらのメッセージを聞きたい場合は、もう少し作業する必要があります。

サービスには通常ウィンドウがないため、既存のウィンドウメッセージキューにフックすることはできません。代わりに、ダミーウィンドウを作成する必要があります。ダミーウィンドウは、メッセージを処理し、それを使って上記のメッセージを処理するためのものです。

message-only windowsの詳細については、MSDNのドキュメントを参照してください。

+0

Windowsサービス(COM)の内部を確認するにはどうすればよいですか? – devnull

+1

ダミーウィンドウを作成し、そのメッセージをWindowProcでチェックする必要があります。 –

+1

すばらしい説明をありがとう! – devnull

関連する問題