长时间运行时保持电脑清醒



我有一个Excel VBA/Macro,可能需要20个小时才能运行。然而,如果我不呆在电脑前,电脑就会一直睡觉,然后锁定。如何在VBA运行时保持计算机清醒或活跃?我尝试添加代码来移动鼠标并发送鼠标点击。我甚至厌倦了观看YouTube直播。

一个程序使用SetThreadExecutionState请求Windows不休眠。

SetThreadExecutionState

使应用程序通知系统它正在被使用,因此防止系统进入睡眠或关闭显示当应用程序运行时。

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

调用SetThreadExecutionState而不调用ES_CONTINUOUS只是重置空闲定时器;为了使显示器或系统处于工作状态,线程必须定期调用SetThreadExecutionState。

要在电源管理的计算机上正常运行,诸如传真之类的应用程序服务器、应答机、备份客户端和网络管理应用程序必须同时使用ES_SYSTEM_REQUIRED和ES_CONTINUOUS它们处理事件。多媒体应用,如视频播放器和表示应用程序,必须使用ES_DISPLAY_REQUIRED无需用户输入即可长时间显示视频。应用程序,如文字处理器、电子表格、浏览器和游戏不需要调用SetThreadExecutionState

你只是调用它,它适用于调用线程。

Public Declare Function SetThreadExecutionState Lib "Kernel32" (ByVal esFlags as Long) as Long
Public Const  ES_AWAYMODE_REQUIRED = &h40
Public Const  ES_CONTINUOUS = &h80000000
Public Const  ES_DISPLAY_REQUIRED = &h2
Public Const  ES_SYSTEM_REQUIRED = &h1
Public Const  ES_USER_PRESENT = &h4
Dim Ret as Long
'System on monitor off
Ret = SetThreadExecutionState(ES_Continuous + ES_System_Required + ES_Awaymode_Required)
'System and monitor on
Ret = SetThreadExecutionState(ES_Continuous + ES_Display_Required + ES_Awaymode_Required)

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate

从我的网站https://winsourcecode.blogspot.com/2020/05/keepdisplayon-runs-program-preventing.html

最新更新