如何检测计算机是否正在关闭以保存会话

时间:2014-07-20 21:31:43

标签: c++ winapi api-hook

我正在使用C ++ / x86 asm制作RPG游戏。我的问题与C ++组件有关。在C ++ / win32中,我如何检测计算机是关闭还是关闭,或者其他什么 - 以便我可以保存游戏会话。我的游戏有一个“保存”选项,但如果用户或其他程序决定关闭计算机,我如何通过某种API挂钩检测到这一点,以便我可以立即将游戏会话保存到文本文件中。

现在请不要通过创建一个被动运行的线程来建议一个选项,因为我希望将文件大小保持在最小,所以如果你可以建议某种类型的WM_钩子那么棒。我会参考MSDN,但我不想通过他们的WM目录搜索数小时。

1 个答案:

答案 0 :(得分:6)

您可以处理会话保存以响应WM_ENDSESSION消息。请注意,在处理完消息处理程序返回之后,您的进程可能随时终止,因此您需要在消息处理程序期间直接保存它,而不仅仅是设置一个标志以让稍后的代码处理保存,因为稍后代码可能无法执行。

评论建议WM_QUERYENDSESSION消息。这有一个略微不同的含义:它使应用程序有机会抱怨会话结束,并为用户提供不注销/关闭系统的机会。根据您的问题,您无意阻止任何此类事情,因此WM_ENDSESSION似乎更适合我。