当我尝试在运行虚拟机时关闭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
,如果您的应用阻止了关机,则有礼貌地显示一条消息,说明原因。如果您不这样做,则用户会挠头询问计算机为何忽略关机指令。