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

fox*_*oxy 16 c++ vmware winapi windows-7

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

VMWare通过自定义消息阻止Windows关闭

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

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

Dav*_*nan 12

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

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

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

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

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

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