我有一台新电脑,不支持S3睡眠,只支持S0。我正在开发一个小型应用程序来根据命令启动各种睡眠模式。当我运行 powercfg -a 时,它告诉我唯一可用的睡眠模式是 S0(我禁用了休眠模式,因为我不想使用它,因为它需要很长时间才能唤醒)。
我发现以下WIN32 API函数会导致PC进入与按开始、关机、睡眠相同的睡眠状态:
SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
这将关闭显示器和键盘背光。电脑的电源灯一直亮着,风扇听起来好像仍在运行,但我的理解是,这是新的“现代待机”的一部分,它实际上并没有让电脑进入睡眠状态(风扇关闭并且电源关闭)。灯闪烁)。
我还设置了 Windows 设置、电源设置,如下所示:
我这样做的原因是,如果您允许计算机在一段不活动时间后进入“睡眠”状态,任务计划程序将不再运行夜间备份等任务。将睡眠设置设置为“从不”允许任务计划程序运行这些任务正确地完成任务。
因此,这些设置通过将计算机置于与您使用时不同的状态来关闭显示器:启动、关机、睡眠。
乍一看似乎合乎逻辑:
SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
只会关闭显示器,类似于 5 分钟超时,但它似乎更接近地模拟 PC 上由“开始”、“关机”、“睡眠”引起的睡眠类型。
有谁知道一种编程(即 Win32 API)方法来模拟显示器关闭而不进入更深的睡眠状态?基本上,我正在寻找一种方法来以编程方式启动睡眠模式,当上面的 Windows 电源设置在 5 分钟不活动(只是关闭显示器)后触发时,Windows 会启动睡眠模式。
谢谢!
根据进入现代待机,没有 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) 以节省电量。 | 对于现代待机系统,不建议使用此超时。 | 现代待机具有内部管理休眠功能的智能,设置单独的休眠超时可能会导致某些功能丢失。 |