- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如果系统试图关闭,应用程序可以通过覆盖 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/
根据 the WM_QUERYENDSESSION docs , “应用程序应该尊重用户的意图并返回 TRUE。” This link将其总结为“[在 XP 中] 应用程序可以返回 TRUE 以指示它
制作一个简单的应用程序,因此当用户退出 Windows 时,它当然会关闭该应用程序。我们正在制作一个简单的 USB 警报应用程序,如果在用户注销时检测到 USB,它会停止关闭 这是到目前为止的代码。
我想调试我编写的 Windows C++ 应用程序,看看为什么它没有像我期望的那样响应 WM_QUERYENDSESSION。显然,仅通过关闭系统来做到这一点有点棘手。是否有任何实用程序或代码可用于将
我有一个程序可以响应 WM_QUERYENDSESSION 以执行一些作为计划任务运行的清理。日志记录表明未执行清理代码。作为计划任务运行的应用程序是否收到 WM_QUERYENDSESSION 消息
在程序的调试版本中,我创建了一个可见窗口,WM_QUERYENDSESSION 消息由其 WNDPROC 接收。在发布版本中,窗口应该是纯消息的,所以我在调用 CreateWindowEx() 时将
如果系统试图关闭,应用程序可以通过覆盖 OnQueryEndSession() 并返回 FALSE 来阻止此关闭。当然,这意味着 WM_ENDSESSION 是唯一要响应关闭的明确消息。 另一方面,t
我想用 JNA 在 Java 中捕获 WM_QUERYENDSESSION 消息,以便我可以执行关闭方法,因为 Runtime#addShutdownHook(Thread) 在 Windows [1
我编写的用于检测 Windows 关机的小应用程序遇到了一个奇怪的问题。 使用远程桌面连接到 Windows 2003 服务器,有时在登录时我会从操作系统获得 WM_QUERYENDSESSION,其
我们有一个奇怪且非常罕见的问题,即人们无法在我们的产品运行时注销 Windows 服务器。系统是多应用的,都是MFC/C++。这些应用程序从管理服务运行,因此它们在注销后仍然存在。多年来,它在世界各地
我的 UI 在 DLL 中。现在,DLL 和使用它的 EXE 都被编译为控制台程序,因此我可以在开发过程中使用 stdout 和 stderr 进行调试和错误报告。其中一件事是我有一个 uninit(
我需要拦截 Windows 关闭,并执行一些数据库查询,然后我的应用程序将关闭。我在 Windows 10 下的 FMX 项目中使用 Delphi XE10 我尝试的是下面的代码,但它不起作用 p
我是一名优秀的程序员,十分优秀!