使用自定义消息防止 Windows 关机
Posted
技术标签:
【中文标题】使用自定义消息防止 Windows 关机【英文标题】:Prevent Windows shutdown with custom message 【发布时间】:2011-11-24 04:17:18 【问题描述】:当我在虚拟机运行时尝试关闭 Windows 时,VMWare Workstation 的表现非常酷:
通常,我们会看到“此程序正在阻止 Windows 关闭”消息,而不是新的“1 个虚拟机正在使用中”。
VMWare 如何做到这一点?我在 Google 上找不到任何关于它的 API。
【问题讨论】:
我知道在命令行中使用shutdown命令时可以指定自定义关闭消息来显示,也许这有关系? 【参考方案1】:您可以阅读有关 Vista here 中引入的所有更改。你真的应该非常仔细地阅读那篇文章。
您正在寻找的 API 是 ShutdownBlockReasonCreate
、ShutdownBlockReasonDestroy
和 ShutdownBlockReasonQuery
。请记住,这些 API 仅在 Vista/2008 服务器上可用。您必须在 2000/XP 上实现回退行为。
如果您需要阻止关机,您可以调用ShutdownBlockReasonCreate
将句柄传递给您的主窗口,并将原因作为字符串传递。该字符串是关闭阻止对话框中显示的内容,即屏幕截图中的“1 virtual machine is in use”。
如果阻止关机的操作完成,则调用ShutdownBlockReasonDestroy
。
请注意,您仍然必须实现 WM_QUERYENDSESSION
以使所有部分组合在一起。这是真正阻止关机的部分。
在 XP 上,您还应该回复 WM_ENDSESSION
,如果您的应用程序被阻止关闭,则显示一条说明原因的消息是礼貌的。如果您不这样做,那么用户就只能摸不着头脑,为什么计算机会忽略关机指令。
【讨论】:
Don't forget to respond to WM_QUERYENDSESSION. 啊,谢谢!我通过谷歌找到了这些,但文档并没有做太多的事情来指出它会影响 UI,所以我认为消息会显示出来,例如,使用消息框。 关键是我在答案的第一句话中链接到的论述文章。这是您处理关机的指南。 API 文档总是更简洁一些。以上是关于使用自定义消息防止 Windows 关机的主要内容,如果未能解决你的问题,请参考以下文章