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

2 c++ winapi api-hook

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

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

小智 6

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

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

  • 在"WM_QUERYENDSESSION"准备文件内容可能是明智的,因为关闭应该是一个快速的过程. (2认同)