电脑怎么让程序休眠(桌面程序阻止电脑进入睡眠或者休眠)

通常我们使用电脑过程中会设置多长时间不操作,电脑就会灭屏、睡眠甚至是休眠。如果电脑进入睡眠或者休眠模式,电脑运行的程序将不再执行。如果我们设计的桌面程序一直在执行某种操作,比如持续的USB通信,操作人可能会离开很久,这个时候,我们不希望电脑进入睡眠或者休眠模式。那么该如何实现这一功能呢?

系统中相关接口文件是提供了这一功能,即调用如下方法即可:

[DllImport("kernel32")] private static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags); [Flags] private enum ExecutionState : uint { SystemRequired = 0x01, DisplayRequired = 0x02, [Obsolete("This value is not supported.")] UserPresent = 0x04, AwayModeRequired = 0x40, Continues = 0x80000000, }

如上所示,只需要设置系统状态即可,ExcutionState各个枚举变量的含义为:SystemRequired,强行设置系统IDLE计时器,使得系统一直处于工作态;DisplayRequired,通过重置显示器IDLE计时器,使得显示器一直处于显示状态;Continues,系统状态维持当前状态,直到下一次方法调用或者标志位改变。

Microsoft官网参考链接为:SetThreadExecutionState function (winbase.h) - Win32 apps | Microsoft Learn

电脑怎么让程序休眠(桌面程序阻止电脑进入睡眠或者休眠)(1)

系统状态枚举变量

具体调用方法如下:

// 设置此线程此时开始一直将处于运行状态,此时计算机不应该进入睡眠状态。 // 此线程退出后,设置将失效。 // 如果需要恢复,请调用 <"RestoreForCurrentThread"/> 方法。 // <param name="keepDisplayOn"> // 表示是否应该同时保持屏幕不关闭。 // 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。 public static void PresentForCurrentThread(bool keepDisplayOn) { SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired)); } //恢复此线程的运行状态,操作系统现在可以正常进入睡眠状态和关闭屏幕。 public static void RestoreForCurrentThread() { SetThreadExecutionState(ExecutionState.Continues); } // 重置系统睡眠或者关闭屏幕的计时器,这样系统睡眠或者屏幕能够继续持续工作设定的超时时间。 // <param name="keepDisplayOn"> // 表示是否应该同时保持屏幕不关闭。 // 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。 public static void ResetIdle(bool keepDisplayOn) { SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired)); }

因此,只要调用ResetIdle(true)就可以实现屏幕常亮并且系统运行正常。如果要取消只要调用RestoreForCurrentThread()即可。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。