2010-02-16 36 views
0

我有一個小窗口,正在偵聽WM_QUERYENDSESSION消息並返回FALSE的小應用程序 - 這應該告訴Windows,我不希望它關機見this MSDN link)。爲什麼其他應用程序仍然關閉,即使當我返回FALSE WM_QUERYENDSESSION消息

我發現的是,即使我要求Windows不關閉,並且Windows本身沒有關閉,它仍然發送WM_ENDSESSION消息並關閉與我自己一起運行的其他應用程序。

有誰知道爲什麼會發生這種情況,可以做些什麼,以便我的應用程序也阻止其他應用程序關閉?

回答

3

我發現我在系統上啓動我的應用程序和其他應用程序的順序會影響哪些被關閉,哪些不被關閉。

多一點研究發現系統調用SetProcessShutdownParameters()。使用這個調用,我可以將我的應用程序放在要關閉Windows的進程列表的前面,從而防止其他應用程序獲取WM_ENDSESSION消息。

所以總結:

當關閉事件發生時(關機,重啓或註銷)時,Windows發送一個WM_QUERYENDSESSION消息,反過來每個應用程序。

如果應用程序不反對關閉(它們返回TRUE),則會向它們發送WM_ENDSESSION消息。

只要一個應用程序返回FALSE到WM_QUERYENDSESSION,關機就會中止,並且不會發送進一步的消息。

1

請看看這個MSDN文章:http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx

基本上,它真的取決於每個應用程序與WM_QUERYENDSESSION和WM_ENDSESSION消息做。正如上面的文章所述,無論WM_QUERYENDSESSION消息的結果如何,都會發送WM_ENDSESSION消息。無論結果如何,許多應用程序都決定關閉。

也有許多應用程序,啓動其關機過程正確收到WM_QUERYENDSESSION後,給他們更多的時間來關機可怕之前「這個應用程序沒有響應...」對話框

希望這澄清了事情有點

相關問題