VCpp阻止电脑熄屏与睡眠

⌚Time: 2022-10-19 20:26:54

👨‍💻Author: Jack Ge


EXECUTION_STATE SetThreadExecutionState(

  [in] EXECUTION_STATE esFlags

);

[in] esFlags



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



Value   含义

ES_AWAYMODE_REQUIRED

0x00000040

启用客场模式。 必须使用 ES_CONTINUOUS 指定此值。

客机模式应仅由媒体录制和媒体分发应用程序使用,这些应用程序必须在台式计算机上执行关键后台处理,而计算机似乎处于睡眠状态。 请参阅“备注”。



ES_CONTINUOUS

0x80000000

通知系统,要设置的状态应保持有效状态,直到下一次调用使用 ES_CONTINUOUS ,另一个状态标志将被清除。

ES_DISPLAY_REQUIRED

0x00000002

通过重置显示空闲计时器强制显示打开。

ES_SYSTEM_REQUIRED

0x00000001

通过重置系统空闲计时器强制系统处于工作状态。

ES_USER_PRESENT

0x00000004

不支持此值。 如果 ES_USER_PRESENT 与其他 esFlags 值组合在一起,则调用将失败,并且不会设置任何指定状态。

通过创建一个线程


DWORD WINAPI prevent_close (LPVOID lpParam)

{

    //每隔60s设置一下执行状态防止熄屏

    while (1)

    {

        SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED|ES_DISPLAY_REQUIRED| 0x00000040 );//屏幕常亮

        //SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED| 0x00000040 );//阻止睡眠

        Sleep(1000*60);

    }

    return 0;

}

启动线程


DWORD threadID;

HANDLE hThread;

hThread = ::CreateThread(NULL,0,prevent_close ,(LPVOID)this,0,&threadID);


可以保持屏幕常亮

取消阻止状态


SetThreadExecutionState(ES_CONTINUOUS);