hibernate失败时的Windows通知

我使用C ++编写WinAPI,并使用以下调用来hibernate计算机:

SetSuspendState(TRUE, NULL, FALSE); 

但是,如果计算机安装了更大的RAMarrays,hibernate失败了。

所以我想知道,如果hibernate失败,Windows是否发送任何通知? 如果没有,如何判断我的hibernate请求是否失败?

看起来像没有直接的方式来检测到冬眠[ 更正:我错了。 见Fowl的答案]直到Windows 8(请参阅PowerRegisterSuspendResumeNotification )。 但是我想你可以空闲循环并观察系统时间。 如果时间突然向前跳跃,你已经成功地休眠(并恢复!),如果这一分钟内没有发生,请求可能失败。 我认为你可以使用GetTickCount64函数,它对系统时间变化不敏感,但是显然包含了睡眠时间的偏差。 如果这不起作用,请使用GetSystemTimeAsFileTime,但也要注意WM_TIMECHANGE消息。

您也可以检查系统是否Windows在休眠失败时向事件日志写入任何内容。 如果是这样,您的应用程序可以监视事件日志中的相关条目。 这将是一个更可靠的方法。

注册( RegisterPowerSettingNotification ),然后监听WM_POWERBROADCAST ,然后询问事件日志以获取更多详细信息。

如果你想处理多个操作系统版本,有一些混乱,但它是可行的。

嗯…也许我错过了这一点,但根据文档,它应该返回FALSE,如果失败。 它仍然返回TRUE在你的情况?