【问题标题】:Prevent Windows shutdown with custom message使用自定义消息防止 Windows 关机
【发布时间】:2011-11-24 04:17:18
【问题描述】:

当我在虚拟机运行时尝试关闭 Windows 时,VMWare Workstation 的表现非常酷:

通常,我们会看到“此程序正在阻止 Windows 关闭”消息,而不是新的“1 个虚拟机正在使用中”。

VMWare 如何做到这一点?我在 Google 上找不到任何关于它的 API。

【问题讨论】:

  • 我知道在命令行中使用shutdown命令时可以指定自定义关闭消息来显示,也许这有关系?

标签: c++ winapi windows-7 vmware


【解决方案1】:

您可以阅读有关 Vista here 中引入的所有更改。你真的应该非常仔细地阅读那篇文章。

您正在寻找的 API 是 ShutdownBlockReasonCreateShutdownBlockReasonDestroyShutdownBlockReasonQuery。请记住,这些 API 仅在 Vista/2008 服务器上可用。您必须在 2000/XP 上实现回退行为。

如果您需要阻止关机,您可以调用ShutdownBlockReasonCreate 将句柄传递给您的主窗口,并将原因作为字符串传递。该字符串是关闭阻止对话框中显示的内容,即屏幕截图中的“1 virtual machine is in use”。

如果阻止关机的操作完成,则调用ShutdownBlockReasonDestroy

请注意,您仍然必须实现 WM_QUERYENDSESSION 以使所有部分组合在一起。这是真正阻止关机的部分。

在 XP 上,您还应该回复 WM_ENDSESSION,如果您的应用程序被阻止关闭,则显示一条说明原因的消息是礼貌的。如果您不这样做,那么用户就只能摸不着头脑,为什么计算机会忽略关机指令。

【讨论】:

  • 啊,谢谢!我通过谷歌找到了这些,但文档并没有做太多的事情来指出它会影响 UI,所以我认为消息会显示出来,例如,使用消息框。
  • 关键是我在答案的第一句话中链接到的论述文章。这是您处理关机的指南。 API 文档总是更简洁一些。
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多