Winapi 如何以编程方式中止Windows(XP | Vista)中的关机?

Winapi 如何以编程方式中止Windows(XP | Vista)中的关机?,winapi,shutdown,system-shutdown,Winapi,Shutdown,System Shutdown,我希望能够1。从我的应用程序中检测(如果需要,2.中止)操作系统关闭,最好使用Windows API 我知道可以使用命令shutdown-a手动中止关机。在最坏的情况下,我可以执行此命令,但我想知道是否有更好的方法以编程方式防止关机 也许通过编程方式通知操作系统即将关闭就足够了-如何操作?来自: 当用户选择结束会话或当应用程序调用其中一个系统关闭功能时,将发送WM_QUERYENDSESSION消息。如果任何应用程序返回零,则会话不会结束。一旦一个应用程序返回零,系统将停止发送WM\u QUER

我希望能够1。从我的应用程序中检测(如果需要,2.中止)操作系统关闭,最好使用Windows API

我知道可以使用命令
shutdown-a
手动中止关机。在最坏的情况下,我可以执行此命令,但我想知道是否有更好的方法以编程方式防止关机

也许通过编程方式通知操作系统即将关闭就足够了-如何操作?

来自:

当用户选择结束会话或当应用程序调用其中一个系统关闭功能时,将发送
WM_QUERYENDSESSION
消息。如果任何应用程序返回零,则会话不会结束。一旦一个应用程序返回零,系统将停止发送
WM\u QUERYENDSESSION
消息

因此,我的应用程序的WindowProc现在处理
WM\u QUERYENDSESSION
消息并返回
0


没想到会这么简单;另外,它还可以在Windows 2000上运行。

关于“简单地”返回0以阻止关机,如果您想以正确的方式执行此操作,它并没有那么简单。尤其是在Vista上。例如,请同时阅读

好吧,这对我来说已经足够正确了。这条消息可能有一些怪癖或高级操作,CW允许更多的人编辑。这篇文章似乎说“在Vista上要复杂得多:必须阻止关机的应用程序应该使用新的关机原因API”。在整篇文章中,它从未提到在XP上处理此问题的“更合适”的方法。我错过什么了吗?