c++ - 使用自定义消息防止 Windows 关机

标签 c++ winapi windows-7 vmware

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

VMWare prevents Windows shutdown with a custom message

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

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

最佳答案

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

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

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

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

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

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

关于c++ - 使用自定义消息防止 Windows 关机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538006/

相关文章:

c++ - C++ 标准中 "as if"规则的声明或基础在哪里?

c++ - CONDITION_VARIABLE 是如何实现的?

c++ - WaitCommEvent 挂起

windows-7 - TortoiseHg:覆盖图标问题(Windows)?

c++ - GetWindowPlacement 给出了不正确的窗口位置

c++ - 在 C++ 中填充仅包含一个 int 数组成员的结构?

c++ - Boost C++ 正则表达式 - 如何获得多个匹配项

c++ - 在 Windows 中,如何检测 Unicode 字符是否呈现为正方形( bean 腐)?

c - 获取包含十六进制值的 LPTSTR 或 CHAR* 的大小

windows-7 - 用户 mycomputer\myloginName 没有所需的权限