You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新PC仅支持S0 Modern Standby,如何通过Windows API仅关闭显示器?

解决S0模式下仅关闭显示器的Windows API方案

在仅支持Modern Standby(S0)的设备上,要实现仅关闭显示器、系统保持活跃(如同电源设置中“X分钟无操作后关显示器”的状态),可以通过以下步骤实现:

核心思路

系统默认的SendMessage(WM_SYSCOMMAND, SC_MONITORPOWER, 2)在S0设备上可能被OEM或系统策略映射到Modern Standby的浅睡眠状态,导致风扇运行、系统进入低功耗但仍可能影响后台任务。要避免这种情况,需要先强制系统保持活跃,再触发显示器关闭。

具体实现代码

关闭显示器(同时保持系统活跃)

#include <Windows.h>

void TurnOffMonitorOnly() {
    // 告诉系统当前有活跃任务,禁止进入睡眠/Modern Standby
    SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
    
    // 向桌面窗口发送关闭显示器的命令,确保对全系统生效
    SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
}

恢复显示器

void TurnOnMonitor() {
    // 恢复显示器
    SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, -1);
    
    // 重置系统睡眠策略为默认设置
    SetThreadExecutionState(ES_CONTINUOUS);
}

关键API说明

  • SetThreadExecutionState:通过ES_SYSTEM_REQUIRED标记告知系统当前有需要持续运行的任务,阻止进入Modern Standby;ES_CONTINUOUS表示该设置会持续生效,直到再次调用重置。
  • SendMessage(GetDesktopWindow(), ...):向系统桌面窗口发送命令,确保操作覆盖所有显示器,而非仅当前程序窗口。SC_MONITORPOWER参数中,2代表关闭显示器,-1代表重新开启。

验证与注意事项

  1. 确保系统电源设置中“睡眠”选项设为从不,避免系统自动触发Modern Standby。
  2. 若仍出现异常,可尝试添加ES_AWAYMODE_REQUIRED标记(适用于Windows Vista及以上),该标记会让系统进入“离开模式”——显示器关闭,但后台任务仍能正常运行,适合备份、下载等持续任务场景:
    SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);
    

内容的提问来源于stack exchange,提问作者vdawg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:37:10