软件编程
位置:首页>> 软件编程>> C#编程>> C#实现系统休眠或静止休眠的方法

C#实现系统休眠或静止休眠的方法

作者:叫我少年  发布时间:2023-12-19 01:55:29 

标签:c#,系统休眠,静止休眠

封装类

用于阻止系统休眠的C#类。以下是代码注释的解释:

  • DllImport("kernel32.dll"):定义了一个API函数,该函数在Windows内核中定义。

  • enum ExecutionFlag : uint:定义了一个枚举类型,其中包含三个标志,分别用于阻止系统休眠、关闭显示器和继续执行。

  • PreventSleep(bool includeDisplay = false):这个方法用于阻止系统休眠,直到线程结束恢复休眠。如果includeDisplay参数为true,则还会阻止关闭显示器。

  • ResotreSleep():这个方法用于恢复系统休眠。

使用了kernel32.dll中的SetThreadExecutionState函数来阻止系统休眠。我们还定义了一个枚举类型ExecutionFlag,用于指定阻止系统休眠的选项。我们可以使用SetThreadExecutionState函数来设置ExecutionFlag标志,以防止系统休眠

class SystemSleepManagement
  {
      //定义API函数
      [DllImport("kernel32.dll")]
      static extern uint SetThreadExecutionState(ExecutionFlag flags);
      [Flags]
      enum ExecutionFlag : uint
      {
          System = 0x00000001,
          Display = 0x00000002,
          Continus = 0x80000000,
      }
      /// <summary>
      ///阻止系统休眠,直到线程结束恢复休眠
      /// </summary>
      /// <param name="includeDisplay">是否阻止关闭显示器</param>
      public static void PreventSleep(bool includeDisplay = false)
      {
          if (includeDisplay)
              SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display | ExecutionFlag.Continus);
          else
              SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Continus);
      }
      /// <summary>
      ///恢复系统休眠
      /// </summary>
      public static void ResotreSleep()
      {
          SetThreadExecutionState(ExecutionFlag.Continus);
      }
      /// <summary>
      ///重置系统休眠计时器
      /// </summary>
      /// <param name="includeDisplay">是否阻止关闭显示器</param>
      public static void ResetSleepTimer(bool includeDisplay = false)
      {
          if (includeDisplay)
              SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display);
          else
              SetThreadExecutionState(ExecutionFlag.System);
      }
  }

因此,要实现下载时阻止程序休眠,则有两种实现方式:

  • 下载期间起计时器定期执行ResetSleepTimer函数

  • 下载开始时执行PreventSleep函数,下载结束后执行ResotreSleep函数。

  • 另外,和阻止系统休眠类似,有的程序还需要有阻止屏保功能。

来源:https://blog.csdn.net/qq_35624605/article/details/130802253

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com