Windows 是不是进入睡眠模式或使用 C++ 休眠? [复制]

Posted

技术标签:

【中文标题】Windows 是不是进入睡眠模式或使用 C++ 休眠? [复制]【英文标题】:Is Windows entering sleep mode or hibernating with C++? [duplicate]Windows 是否进入睡眠模式或使用 C++ 休眠? [复制] 【发布时间】:2012-08-14 00:52:58 【问题描述】:

可能重复:How to detect if windows is going to hibernate or suspend?

有人可以刷新我的记忆吗,从在 Windows 上运行的程序的角度来看,无法知道系统是进入睡眠模式还是休眠,对吗? (我需要知道系统进入的模式,或者刚刚恢复的模式。)

【问题讨论】:

应该有一个标准的系统消息警告人们即将进入睡眠模式,因此需要准备的应用程序实际上可以这样做。那是什么,我不知道。 有一个,但程序可以判断系统进入的是睡眠还是休眠? 从技术上讲,这两种状态之间并没有太大的不同,除了系统稍后进入的处理器 S 状态。无论哪种方式,应用程序都没有运行,但休眠比单纯的睡眠“更深”。 耗电量有所不同。 你将永远得到一个承诺,即 Windows 会以某种方式关闭。确保承诺准确无误。当机器睡眠和休眠时,它就像死了一样。它无法保证机器不会耗尽电池并将睡眠变成重新启动。 【参考方案1】:

根据我收集到的信息,用户模式代码无法区分挂起和休眠。有一个名为 SYSTEM_POWER_STATE 的内核模式枚举,其中包含您正在寻找的状态,但您无法在用户模式下获得该状态。

你能做的最好的就是设置回调来捕获WM_POWERBROADCAST 消息。 PBT_APMQUERYSUSPEND 消息在挂起或休眠即将发生时发送。之后,如果没有取消暂停,您将收到 PBT_APMSUSPEND。恢复时,将发送 PBT_APMRESUMEAUTOMATIC 消息。

【讨论】:

感谢虚空之星。我想知道是否可以从本地服务访问该 SYSTEM_POWER_STATE 结构?不过,我将如何使用它来区分? 请参阅my answer here,这解释了为什么不可能。 好的,谢谢。我想我明白你关于系统从一种状态转换到另一种状态的观点。但是在那种情况下,操作系统先报告它进入的状态然后再报告它恢复的状态不是很好。但是,我想这要求太多了,不是吗?

以上是关于Windows 是不是进入睡眠模式或使用 C++ 休眠? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

当 Windows 进入睡眠模式然后唤醒时 setTimeout 不起作用

当 Windows 进入睡眠模式然后唤醒时 setTimeout 不起作用

如何忽略 SIGKILL 或强制进程进入“D”睡眠状态?

以编程方式将PC置于睡眠模式

C: 如何检查电脑是不是被锁定/睡眠?

如何检测是不是有任何进程阻止 Windows 进入睡眠状态?