与Windows重新启动/关闭的交互

罗斯兰(Ruslan F.)

例如,我们有一个Win32应用程序,该应用程序在主窗口关闭时隐藏在托盘中。
当用户重新启动或关闭时,OS应用程序已通过某种方式关闭。
如何正确处理此关闭事件?

大卫·赫弗南(David Heffernan)

这在MSDN上有记录:Shutting Down

本质上,您需要一个顶层窗口来侦听一个WM_QUERYENDSESSIONWM_ENDSESSION两个侦听这些消息到达时,您将有机会执行与关机相关的任务。

具有窗口和消息队列的应用程序通过WM_QUERYENDSESSION和WM_ENDSESSION消息接收关闭通知。这些应用程序应返回TRUE指示可以终止它们。除非绝对必要,否则应用程序不应阻止系统关闭。应用程序应在处理WM_ENDSESSION时执行所有必需的清除操作。具有未保存数据的应用程序可以将数据保存到临时位置,并在下次应用程序启动时将其还原。建议应用程序经常保存其数据和状态。例如,在用户发起的保存操作之间自动保存数据,以减少关机时要保存的数据量。

如果您希望在关机期间显示UI,也许是因为您的应用正在执行无法幸免于中断的关键操作,则可以使用ShutdownBlockReasonCreate

如果应用程序必须阻止潜在的系统关闭,则可以调用ShutdownBlockReasonCreate函数。调用方提供了一个原因字符串,该字符串将显示给用户。原因字符串应简短明了,为用户提供决定是否继续关闭系统所需的信息。

请注意,此过程与Vista相比发生了很大变化。如果需要支持XP,则可能需要在XP下行为不同的代码。该主题也包含在MSDN:Windows Vista中的应用程序关闭更改中

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章