如何以编程方式确定Windows是否正在关闭?

时间:2012-01-28 22:41:45

标签: c windows winapi

我正在制作一个应用程序,它可以在我们的每台PC上随机运行。它工作正常,但如果PC当前正在关闭,那么我无法读取WMI,我得到一些错误。因此,我需要确定PC当前是否正在关闭,因此我可以避免这些错误。有人有想法吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

使用索引SM_SHUTTINGDOWN0x2000)拨打GetSystemMetrics

答案 1 :(得分:2)

创建隐藏的顶级窗口并收听WM_ENDSESSION条消息。 wParam的值将告诉您整个系统是否正在关闭,或者用户是否正在注销。

如果您的应用是控制台应用,请使用SetConsoleCtrlHandler注册以接收关机通知。

答案 2 :(得分:1)

任何检测到这种情况的尝试都会出现竞争情况:系统关闭可能会在您检测到它没有关闭之后立即启动,但在您尝试执行在关闭期间无法运行的操作之前。因此,解决问题的方法是错误的。相反,您只需要处理WMI读取失败并确定它们是否由系统关闭引起,并且在这种情况下中止操作或以任何其他有意义的方式继续操作。

有可能使用一种同步关闭检测机制,您可以在关闭之前实际锁定/延迟关闭一段时间,然后在该间隔内进行处理。如果是这样,那也是一种没有竞争条件的安全方法。