WPF常用技巧-防止系统休眠

程序中的一个终端窗口多数时间处于无人值守状态,并实时联网工作,为避免系统休眠、显示器关屏等情况,可调用kernel32.dll的SetThreadExecutionState函数,此函数的作用是通知操作系统本程序正在使用中,不得进入睡眠状态或关闭显示器。

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

  • ExecutionFlag: 参数枚举,常用的几个成员如下:
    • ES_SYSTEM_REQUIRED = 0x00000001:通过重置系统空闲计时器强制系统处于工作状态。
    • ES_DISPLAY_REQUIRED = 0x00000002:通过重置显示空闲计时器强制显示处于打开状态。
    • ES_CONTINUOUS = 0x80000000:通知系统正在设置的状态应保持有效,直到使用**ES_CONTINUOUS**的下一次调用和清除其他状态标志之一。
    • 以上三个参数在程序调用SetThreadExecutionState时,必须通过|来组合使用。
    • 在程序关闭时,最好单独使用ES_CONTINUOUS参数再调用一次SetThreadExecutionState函数,以告知系统可以按原计划休眠或关闭显示器。

以WPF为例子,可以在App.xaml.cs中,重写CreateShellOnExit通过调用SetThreadExecutionState来防止系统休眠和恢复休眠。

  • SystemSleepTool.cs

    csharp 复制代码
    public static class SystemSleepTool
    {
        //定义API函数
        [DllImport("kernel32.dll")]
        static extern uint SetThreadExecutionState(ExecutionFlag flags);
    
        [Flags]
        enum ExecutionFlag : uint
        {
            ES_SYSTEM_REQUIRED = 0x00000001,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_CONTINUOUS = 0x80000000,
        }
    
        /// <summary>
        ///阻止系统休眠
        /// </summary>
        public static void PreventSleep()
        {
            SetThreadExecutionState(ExecutionFlag.ES_SYSTEM_REQUIRED | ExecutionFlag.ES_DISPLAY_REQUIRED | ExecutionFlag.ES_CONTINUOUS);
        }
        
        /// <summary>
        ///恢复系统休眠
        /// </summary>
        public static void RestoreSleep()
        {
    		    SetThreadExecutionState(ExecutionFlag.ES_CONTINUOUS);
        }
    }
  • App.xaml.cs

    csharp 复制代码
    public partial class App : PrismApplication
    {
        protected override void OnExit(ExitEventArgs e)
        {
            ......
            SystemSleepTool.RestoreSleep();
            base.OnExit(e);
        }
    
    		protected override Window CreateShell()
    		{
    				......
    				SystemSleepTool.PreventSleep();
    				return Container.Resolve<MainWindow>();
    		}
    		
    		......
    }
相关推荐
江华森6 分钟前
04-python-面向对象
开发语言·python
AI行业学习9 分钟前
Notepad++ 官方纯净下载+完整安装教程(Windows)【2026.7.5】
开发语言·windows·python·前端框架·html·notepad++
前端百草阁22 分钟前
JavaScript 设计模式(23 种)
开发语言·前端·javascript·设计模式
EntyIU26 分钟前
Java NIO 实战
java·开发语言·nio
浩瀚之水_csdn1 小时前
Python 3 网络编程详解:从原理到实战
开发语言·网络·python
geovindu1 小时前
java: Singleton Pattern
java·开发语言·后端·单例模式·设计模式·创建型模式
AI行业学习1 小时前
2026 版 Notepad++ 完整图文安装指南|官方渠道无捆绑,一键切换中文界面
开发语言·人工智能·python·html·notepad++
鹏易灵1 小时前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
水无痕simon1 小时前
5 多表操作
java·开发语言·数据库
初阳7851 小时前
【Qt】系统相关(2)——文件
开发语言·qt