新电脑上具有现代待机功能的睡眠模式(win32 api)

问题描述 投票:0回答:1

我有一台新电脑,不支持S3睡眠,只支持S0。我正在开发一个小型应用程序来根据命令启动各种睡眠模式。当我运行 powercfg -a 时,它告诉我唯一可用的睡眠模式是 S0(我禁用了休眠模式,因为我不想使用它,因为它需要很长时间才能唤醒)。

我发现以下WIN32 API函数会导致PC进入与按开始、关机、睡眠相同的睡眠状态:

SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);

这将关闭显示器和键盘背光。电脑的电源灯一直亮着,风扇听起来好像仍在运行,但我的理解是,这是新的“现代待机”的一部分,它实际上并没有让电脑进入睡眠状态(风扇关闭并且电源关闭)。灯闪烁)。

我还设置了 Windows 设置、电源设置,如下所示:

  • [5 分钟]后关闭显示器
  • 在[从不]之后让我的设备进入睡眠状态

我这样做的原因是,如果您允许计算机在一段不活动时间后进入“睡眠”状态,任务计划程序将不再运行夜间备份等任务。将睡眠设置设置为“从不”允许任务计划程序运行这些任务正确地完成任务。

因此,这些设置通过将计算机置于与您使用时不同的状态来关闭显示器:启动、关机、睡眠。

乍一看似乎合乎逻辑:

SendMessage(application_handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);

只会关闭显示器,类似于 5 分钟超时,但它似乎更接近地模拟 PC 上由“开始”、“关机”、“睡眠”引起的睡眠类型。

有谁知道一种编程(即 Win32 API)方法来模拟显示器关闭而不进入更深的睡眠状态?基本上,我正在寻找一种方法来以编程方式启动睡眠模式,当上面的 Windows 电源设置在 5 分钟不活动(只是关闭显示器)后触发时,Windows 会启动睡眠模式。

谢谢!

winapi sleep monitor standby
1个回答
0
投票

根据进入现代待机,没有 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) 以节省电量。 对于现代待机系统,不建议使用此超时。 现代待机具有内部管理休眠功能的智能,设置单独的休眠超时可能会导致某些功能丢失。
© www.soinside.com 2019 - 2024. All rights reserved.