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

Windows 11如何重置系统空闲计时器?SetThreadExecutionState(ES_SYSTEM_REQUIRED)失效

重置Windows 11系统空闲计时器的可行方法

之前仅调用SetThreadExecutionState(ES_SYSTEM_REQUIRED)(不带ES_CONTINUOUS参数)的方式在Windows 11中已无法重置系统空闲计时器,以下是当前可行的实现方式:

方法一:调整SetThreadExecutionState参数组合

通过同时指定ES_SYSTEM_REQUIRED和ES_DISPLAY_REQUIRED参数调用API,可有效重置空闲计时器,同时临时阻止系统和显示器进入休眠状态。如果仅需重置计时器而不想长期阻止休眠,可在调用后立即恢复系统默认状态:

// 重置空闲计时器并临时阻止休眠
SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
// 立即恢复系统默认休眠策略
SetThreadExecutionState(ES_CONTINUOUS);

若需要持续阻止系统进入空闲状态(而非单次重置),则可以保留ES_CONTINUOUS参数:

// 持续阻止系统进入空闲状态(需在程序退出前恢复)
SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
// 程序退出时恢复默认状态
SetThreadExecutionState(ES_CONTINUOUS);

方法二:模拟用户输入操作

通过模拟微小的用户输入(如鼠标移动、键盘按键),系统会判定用户处于活跃状态,自动重置空闲计时器。示例代码(使用SendInput模拟鼠标移动):

INPUT input = {0};
input.type = INPUT_MOUSE;
input.mi.dx = 1; // 微小移动X坐标
input.mi.dy = 1; // 微小移动Y坐标
input.mi.mouseData = 0;
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(INPUT));

// 可再移回原位置,避免影响用户操作
input.mi.dx = -1;
input.mi.dy = -1;
SendInput(1, &input, sizeof(INPUT));

这种方法完全模拟真实用户操作,兼容性好,但需注意避免频繁模拟导致的系统资源占用或用户干扰。

方法三:使用PowerSetRequest API(适用于更精细的电源控制)

通过PowerSetRequest函数向系统发送电源请求,指定PowerSystemRequired类型,同样可重置空闲计时器。示例代码:

HANDLE hPowerRequest = PowerCreateRequest(&PowerRequestContext);
if (hPowerRequest != INVALID_HANDLE_VALUE) {
    PowerSetRequest(hPowerRequest, PowerSystemRequired);
    // 重置完成后取消请求
    PowerClearRequest(hPowerRequest, PowerSystemRequired);
    CloseHandle(hPowerRequest);
}

该API提供更灵活的电源管理控制,适合需要精细控制电源状态的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:50:00