使用自定义消息阻止Windows关闭

时间:2011-09-24 08:52:10

标签: c++ winapi windows-7 vmware

当我在虚拟机运行时尝试关闭Windows时,VMWare Workstation做的很酷:

VMWare prevents Windows shutdown with a custom message

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

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

1 个答案:

答案 0 :(得分:11)

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

您要查找的API有ShutdownBlockReasonCreateShutdownBlockReasonDestroyShutdownBlockReasonQuery。请记住,这些API仅适用于Vista / 2008服务器。你必须在2000 / XP上实现回退行为。

如果您需要阻止关闭,请调用ShutdownBlockReasonCreate将句柄传递到主窗口,并将原因作为字符串传递。此字符串是关闭阻止对话框中显示的内容,即屏幕截图中的“1个虚拟机正在使用中”。

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

请注意,您仍必须实施WM_QUERYENDSESSION才能使所有部分合在一起。这是实际阻止关闭的部分。

在XP上你也应该回复WM_ENDSESSION,如果你的应用程序被阻止关闭,那么显示一条消息指示原因是礼貌的。如果你不这样做,那么用户就会忘记计算机忽略关机指令的原因。