我正在使用C ++编写WinAPI编码,并使用以下调用来休眠计算机:
SetSuspendState(TRUE, NULL, FALSE);
但是,如果计算机安装了更大的RAM阵列,则休眠将失败。
所以我想知道,如果休眠失败,Windows会发送任何通知吗?如果没有,如何判断我的休眠请求是否失败?
答案 0 :(得分:1)
看起来没有直接的方法来检测休眠[ 更正:我错了。请参阅Fowl的回答。] ,直到Windows 8(见PowerRegisterSuspendResumeNotification)。但我想你可以闲置循环并观察系统时间。如果时间突然向前跳跃,你已经成功休眠(并恢复了!),如果在一分钟左右没有发生这种情况,请求可能会失败。我认为你可以使用GetTickCount64函数,它对系统时间变化不敏感,但显然包含了睡眠时间的偏差。如果这不起作用,请使用GetSystemTimeAsFileTime,但也要注意WM_TIMECHANGE条消息。
您还可以检查有问题的系统,当休眠失败时,Windows是否向事件日志写入任何内容。如果是这样,您的应用程序可以监视相关条目的事件日志。这将是一种更可靠的方法。
答案 1 :(得分:1)
注册(RegisterPowerSettingNotification),然后收听WM_POWERBROADCAST,然后查询事件日志以获取更多详细信息。
如果你想要处理多个操作系统版本,有点麻烦,但它是可行的。
答案 2 :(得分:0)