我有一台新电脑,不支持S3睡眠,只支持S0。 我正在开发一个小型应用程序来根据命令启动各种睡眠模式。 当我运行
powercfg -a
时,它告诉我唯一可用的睡眠模式是 S0(我禁用了休眠模式,因为我不想使用它,因为它需要很长时间才能唤醒)。
我发现以下 Windows API 函数将导致 PC 进入与按 Start > Shutdown > Sleep 相同的睡眠状态:
SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
这将关闭显示器和键盘背光。 电脑的电源灯一直亮着,风扇听起来好像仍在运行,但我的理解是,这是新的“现代待机”的一部分,它实际上并没有让电脑进入睡眠状态(风扇关闭并且电源关闭)。灯闪烁)。
我还设置了 Windows 设置、电源设置,如下所示:
我这样做的原因是,如果您允许计算机在一段不活动时间后进入“睡眠”状态,任务计划程序将不再运行夜间备份等任务。将睡眠设置设置为“从不”允许任务计划程序运行这些任务正确完成任务。
因此,这些设置通过将计算机置于与您使用时不同的状态来关闭显示器:开始 > 关机 > 睡眠。
乍一看似乎合乎逻辑:
SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
只会关闭显示器,类似于 5 分钟超时,但它似乎更接近地模拟我的电脑上由 Start > Shutdown > Sleep 引起的睡眠类型。
有谁知道一种编程(即Windows API)方法来模拟显示器关闭而不会进入更深的睡眠状态基本上,我正在寻找一种方法来以编程方式启动Windows在Windows电源关闭时启动的睡眠模式上述设置会在 5 分钟不活动后触发(仅关闭显示器)。
根据进入现代待机,没有 Win32 API 可以让 Windows 进入现代待机。
当用户使系统进入睡眠状态时,现代待机就会启动 (例如,用户按下电源按钮、合上盖子、怠速行驶或 从 Windows 开始菜单中的电源按钮中选择睡眠)。
根据显示、睡眠和休眠空闲计时器,您可以使用SC_MONITORPOWER来关闭显示器,但现代待机意味着让计算机进入睡眠状态,显示器立即断电。
定时器 | 在传统 PC 上 | 在现代待机系统上 | 注释 |
---|---|---|---|
调暗显示屏 | 从 Windows 8.1 开始不再支持此超时。在 Windows 10 中,显示屏会在关闭前 10 秒自动变暗。 | 从 Windows 8.1 开始不再支持此超时。在 Windows 10 中,显示屏会在关闭前 10 秒自动变暗。 | |
关闭显示屏 | 发生超时时,显示屏立即关闭。然而,系统继续运行,所有应用程序继续正常运行,就像显示器已开机一样。 | 发生超时时,显示屏立即关闭。然而,系统继续运行,所有应用程序继续正常运行,就像显示器已开机一样。 | 显示屏关闭和屏幕关闭通知触发之间有 5 秒的宽限期。 |
让电脑进入睡眠状态 | 发生此超时时,系统立即进入 ACPI 睡眠 (S3) 状态。所有应用程序都会停止执行,因为所有处理器都将关闭。 | 发生此超时时,系统进入现代待机状态,并且显示器立即断电。然后,系统将逐步完成为现代睡眠准备软件中描述的准备阶段。 | |
之后休眠 | 当此计时器到期时,系统从 ACPI 睡眠 (S3) 唤醒并立即进入 ACPI 休眠 (S4) 以节省电量。 | 对于现代待机系统,不建议使用此超时。 | 现代待机具有内部管理休眠功能的智能,设置单独的休眠超时可能会导致某些功能丢失。 |