通常,我们会看到“此程序阻止Windows关闭”消息而不是新的“1虚拟机正在使用”。
VMWare如何做到这一点?我无法在Google上找到任何关于它的API。
答案 0 :(得分:11)
您可以阅读有关Vista here中引入的所有更改的信息。你真的应该仔细阅读那篇文章。
您要查找的API有ShutdownBlockReasonCreate
,ShutdownBlockReasonDestroy
和ShutdownBlockReasonQuery
。请记住,这些API仅适用于Vista / 2008服务器。你必须在2000 / XP上实现回退行为。
如果您需要阻止关闭,请调用ShutdownBlockReasonCreate
将句柄传递到主窗口,并将原因作为字符串传递。此字符串是关闭阻止对话框中显示的内容,即屏幕截图中的“1个虚拟机正在使用中”。
如果阻止关闭的操作完成,则调用ShutdownBlockReasonDestroy
。
请注意,您仍必须实施WM_QUERYENDSESSION
才能使所有部分合在一起。这是实际阻止关闭的部分。
在XP上你也应该回复WM_ENDSESSION
,如果你的应用程序被阻止关闭,那么显示一条消息指示原因是礼貌的。如果你不这样做,那么用户就会忘记计算机忽略关机指令的原因。