excel 长时间运行时保持计算机唤醒

dphi5xsq  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(209)

我有一个Excel VBA/宏,可能需要20个小时才能运行。但是,如果我不在电脑前,电脑会一直处于睡眠状态,然后锁定。我如何才能在VBA运行时保持电脑处于唤醒状态或活动状态?我试着添加代码来移动鼠标和发送鼠标点击。我甚至厌倦了YouTube上的实时流。

nukf8bse

nukf8bse1#

某个程序使用SetThreadExecutionState要求Windows不睡眠。

设置线程执行状态

使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠或关闭显示器。
系统会自动侦测活动,例如本机键盘或鼠标器输入、服务器活动以及变更 windows 焦点。不会自动侦测的活动包括磁盘或CPU活动以及视频显示。
在没有ES_CONTINUOUS的情况下调用SetThreadExecutionState只会重置空闲计时器;为了保持显示器或系统处于工作状态,线程必须定期调用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

stszievb

stszievb2#

尝试安装微软的免费PowerToys实用程序,然后使用该实用程序的Awake部分。您可以在here上了解更多信息。

相关问题