为什么即使我将FALSE返回到WM_QUERYENDSESSION消息,其他应用程序仍然会关闭

时间:2010-02-16 13:18:42

标签: windows shutdown

我有一个小应用程序,其中一个Window正在侦听WM_QUERYENDSESSION消息并返回FALSE - 这应该告诉Windows我不希望它关闭(参见this MSDN link)。

我发现即使我要求Windows不关闭,而Windows本身没有关闭,它仍然发送WM_ENDSESSION消息并关闭与我自己一起运行的其他应用程序。

有谁知道为什么会发生这种情况以及可以做些什么,以便我的应用程序也阻止其他应用程序关闭?

2 个答案:

答案 0 :(得分:3)

我发现我在系统上启动应用程序和其他应用程序的顺序会影响哪些应用程序关闭,哪些不关闭。

更多的研究发现了对SetProcessShutdownParameters()的系统调用。使用此调用,我可以将我的应用程序放在要关于关闭Windows的进程列表的前面,从而防止其他应用程序获取WM_ENDSESSION消息。

总结一下:

当发生关闭事件(关闭,重启或注销)时,Windows会依次向每个应用程序发送WM_QUERYENDSESSION消息。

如果应用程序不反对关闭(它们返回TRUE),则会向它们发送WM_ENDSESSION消息。

只要一个应用程序返回FALSE到WM_QUERYENDSESSION,就会中止关闭,并且不会再发送任何消息。

答案 1 :(得分:1)

请查看这篇msdn文章:http://msdn.microsoft.com/en-us/library/aa376890(VS.85).aspx

基本上,它实际上取决于每个应用程序对WM_QUERYENDSESSION和WM_ENDSESSION消息的处理方式。如上文所述,无论WM_QUERYENDSESSION消息的结果如何,都会发送WM_ENDSESSION消息。许多应用程序决定关闭,无论结果如何。

还有很多应用程序在收到WM_QUERYENDSESSION之后立即启动关闭过程,以便在可怕的“此应用程序没有响应...”对话框之前给它们更多时间关闭

希望这能澄清一些事情