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

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

封装类

用于阻止系统休眠的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

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

猜你喜欢

  • Android使用ViewPager实现类似laucher左右拖动效果

    2022-05-18 20:33:59
  • 实现Java删除一个集合的多个元素

    2021-09-19 10:41:28
  • 如何在mapper文件中使用in("str1","str2")

    2023-07-10 10:40:51
  • Android利用RecyclerView实现全选、置顶和拖拽功能示例

    2023-06-05 18:21:22
  • C# listview 点击列头排序的实例

    2023-11-26 20:09:05
  • JAVA利用递归删除文件代码实例

    2022-12-10 23:59:53
  • Android build文件的删除的方法

    2022-12-28 12:40:17
  • 详谈C++引用&和指针在作为形参时的区别

    2023-12-13 16:50:49
  • C#实现截图工具小项目

    2023-10-02 08:20:03
  • 使用adb or fastboot命令进入高通的9008(edl)模式的两种方法

    2023-02-02 15:50:49
  • Kotlin协程Channel特点及使用细节详解

    2021-06-03 08:12:34
  • android开发教程之子线程中更新界面

    2022-11-17 04:41:42
  • unity制作瞄准镜效果

    2022-04-15 23:45:10
  • C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

    2021-10-21 09:08:21
  • Java编程语言特性和优势

    2021-11-14 06:54:27
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    2023-12-06 07:34:14
  • 详解Java中List的正确的删除方法

    2021-09-19 13:20:42
  • Spring实现内置监听器

    2021-07-06 01:29:06
  • C# WinForm调用Shell_NotifyIcon的示例代码

    2021-07-17 16:04:41
  • Java日期时间操作的方法

    2021-12-27 18:36:05
  • asp之家 软件编程 m.aspxhome.com