0

WM_QUERYENDSESSIONメッセージをリッスンしてFALSEを返すウィンドウを備えた小さなアプリがあります。これにより、Windowsにシャットダウンしたくないことが通知されます(このMSDNリンクを参照)。

私が見つけたのは、Windowsにシャットダウンしないように要求していて、Windows自体がシャットダウンしていない場合でも、WM_ENDSESSIONメッセージを送信し、自分のアプリケーションと一緒に実行されている他のアプリケーションを閉じていることです。

なぜこれが起こっているのか、そして私のアプリケーションが他のアプリケーションのシャットダウンを防ぐために何ができるのか誰かが知っていますか?

4

2 に答える 2

4

システム上でアプリケーションと他のアプリケーションを起動する順序が、シャットダウンされるアプリケーションとシャットダウンされないアプリケーションに影響することがわかりました。

もう少し調査したところ、SetProcessShutdownParameters()へのシステムコールが明らかになりました。この呼び出しを使用して、Windowsのシャットダウンについて尋ねられるプロセスのリストの先頭にアプリケーションを配置し、他のアプリケーションがWM_ENDSESSIONメッセージを受け取らないようにすることができます。

要約すると:

シャットダウンイベント(シャットダウン、再起動、またはログオフ)が発生すると、Windowsは各アプリケーションにWM_QUERYENDSESSIONメッセージを順番に送信します。

アプリケーションがシャットダウンに反対しない場合(TRUEを返す場合)、WM_ENDSESSIONメッセージが送信されます。

1つのアプリケーションがWM_QUERYENDSESSIONにFALSEを返すとすぐに、シャットダウンは中止され、それ以上のメッセージは送信されません。

于 2010-02-17T11:17:57.677 に答える
1

このmsdnの記事を調べてください:http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx

基本的に、これは実際には、各アプリケーションがWM_QUERYENDSESSIONメッセージとWM_ENDSESSIONメッセージをどのように処理するかによって異なります。上記の記事で述べたように、WM_ENDSESSIONメッセージは、WM_QUERYENDSESSIONメッセージの結果に関係なく送信されます。多くのアプリケーションは、結果に関係なくシャットダウンすることを決定します。

WM_QUERYENDSESSIONを受信した直後にシャットダウンプロセスを開始して、恐ろしい「このアプリケーションが応答していません...」ダイアログが表示される前にシャットダウンする時間を増やすアプリケーションも多数あります。

これが物事を少し明確にすることを願っています

于 2010-02-16T13:25:39.033 に答える