Win32/MFC/Qt阻止系统休眠方案

xingyun86 2022-10-12 593

Win32/MFC/Qt阻止系统休眠方案

SetThreadExecutionState 函数 (winbase.h)

使应用程序能够通知系统正在使用它,从而防止系统进入睡眠状态或在应用程序运行时关闭显示器。

EXECUTION_STATE SetThreadExecutionState(
  [in] EXECUTION_STATE esFlags
);

参数

[in] esFlags

线程的执行要求。 此参数可使用以下一个或多个值。

返回值

如果函数成功,则返回值为上一个线程执行状态。

如果函数失败,则返回值为 NULL

注解

系统会自动检测本地键盘或鼠标输入、服务器活动和更改窗口焦点等活动。 未自动检测到的活动包括磁盘或 CPU 活动和视频显示。

调用 SetThreadExecutionState 而不 ES_CONTINUOUS 只需重置空闲计时器;若要使显示或系统保持工作状态,线程必须定期调用 SetThreadExecutionState 。

若要在电源托管计算机上正确运行,传真服务器、应答计算机、备份代理和网络管理应用程序等应用程序在处理事件时必须使用 ES_SYSTEM_REQUIRED 和 ES_CONTINUOUS 。 多媒体应用程序(如视频播放器和演示文稿应用程序)在长时间显示视频时必须使用 ES_DISPLAY_REQUIRED ,而无需用户输入。 单词处理器、电子表格、浏览器和游戏等应用程序不需要调用 SetThreadExecutionState

仅当需要系统执行后台任务(如将电视内容或流媒体录制到其他设备)的媒体应用程序绝对必要时,才应使用 ES_AWAYMODE_REQUIRED 值。 不需要关键后台处理或在便携式计算机上运行的应用程序不应启用离开模式,因为它阻止系统通过进入真正的睡眠来节省电源。

若要启用离开模式,应用程序同时使用ES_AWAYMODE_REQUIREDES_CONTINUOUS;若要禁用离开模式,应用程序使用 ES_CONTINUOUS 调用 SetThreadExecutionState 并清除ES_AWAYMODE_REQUIRED。 启用客机模式后,任何使计算机处于睡眠状态的操作都会将其置于离开模式。 当系统继续执行不需要用户输入的任务时,计算机似乎正在休眠。 离开模式不会影响睡眠空闲计时器;若要防止系统在计时器过期时进入睡眠状态,应用程序还必须设置 ES_SYSTEM_REQUIRED 值。

SetThreadExecutionState 函数不能用于阻止用户将计算机置于睡眠状态。 当用户关闭笔记本电脑上的盖子或按电源按钮时,应用程序应尊重用户期望有某种行为。

此函数不会阻止屏幕保存程序执行。

示例

// Television recording is beginning. Enable away mode and prevent
// the sleep idle time-out.
//
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);
//
// Wait until recording is complete...
//
//
// Clear EXECUTION_STATE flags to disable away mode and allow the system to idle to sleep normally.
//
SetThreadExecutionState(ES_CONTINUOUS);

要求

补充XP保证解决方案:

if (SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED | ES_DISPLAY_REQUIRED) == NULL)
{
	// try XP variant as well just to make sure 
	SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
}  // if


×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回