当我尝试在运行虚拟机时关闭Windows时,VMWare Workstation会执行一些非常酷的操作:

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

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

最佳答案

您可以阅读有关Vista here中引入的所有更改的信息。您确实应该非常仔细地阅读该文章。

您要查找的API是 ShutdownBlockReasonCreate ShutdownBlockReasonDestroy ShutdownBlockReasonQuery 。请记住,这些API仅在Vista/2008服务器上可用。您必须在2000/XP上实现后备行为。

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

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

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

在XP上,您还应该响应 WM_ENDSESSION ,如果您的应用阻止了关机,则有礼貌地显示一条消息,说明原因。如果您不这样做,则用户会挠头询问计算机为何忽略关机指令。

10-07 19:02
查看更多