gpt4 book ai didi

windows - 我应该处理 WM_ENDSESSION、WM_QUERYENDSESSION,两者都处理还是都不处理?

转载 作者:可可西里 更新时间:2023-11-01 11:12:16 31 4
gpt4 key购买 nike

如果系统试图关闭,应用程序可以通过覆盖 OnQueryEndSession() 并返回 FALSE 来阻止此关闭。当然,这意味着 WM_ENDSESSION 是唯一要响应关闭的明确消息。

另一方面,this question 的最佳答案引用不少于 Raymond Chen 的话说,响应 WM_ENDSESSION 本质上是毫无意义的。所以这很令人困惑。

是否有某种“最佳实践”原则可用于决定应响应哪些消息(如果有)以执行何种应用程序关闭工作?

特别是,如果没有处理任何消息,关闭过程是否会导致应用程序关闭,就像用户手动关闭应用程序一样(例如,单击红色 X 关闭按钮)?

最佳答案

This article Microsoft 对 Vista 之前和之后的 session 结束最佳实践进行了非常全面的讨论。这篇文章非常清楚地表明,如果收到 WM_QUERYENDSESSION,则应该假定会在某个时间点关闭。

一旦所有应用程序都响应了 WM_ENDSESSION 消息,或者在收到 WM_ENDSESSION 消息后的 5 秒内被迫终止,Windows 可能会随时关闭.这可能会限制为响应 WM_ENDSESSION 可以执行的操作。

如果应用程序需要更多时间来清理自身:

If your application may need more than 5 seconds to complete its shutdown processing in response to WM_ENDSESSION, it should call ShutdownBlockReasonCreate() in its WM_QUERYENDSESSION handler, and promptly respond TRUE to WM_QUERYENDSESSION so as not to block shutdown. It should then perform all shutdown processing in its WM_ENDSESSION handler.

Windows 显然不会向您的应用程序发送任何其他消息以允许它“正常”退出(例如 WM_CLOSE)。相反,它只会调用 TerminateProcess。如果你想要一个优雅的关闭,你必须在上述限制条件下自己构建它。

关于windows - 我应该处理 WM_ENDSESSION、WM_QUERYENDSESSION,两者都处理还是都不处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31374339/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com