首页 > 编程语言 > c#实现系统休眠

c#实现系统休眠

时间:2022-09-06 08:34:49浏览次数:51  
标签:Continus c# 系统 System 休眠 static ExecutionFlag SetThreadExecutionState

c#实现系统休眠

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函数。
另外,和阻止系统休眠类似,有的程序还需要有阻止屏保功能。

标签:Continus,c#,系统,System,休眠,static,ExecutionFlag,SetThreadExecutionState
From: https://www.cnblogs.com/ouyangkai/p/16660364.html

相关文章

  • C#7.0 模式匹配
    Photoby托马斯·凯利on不飞溅C#7.0模式匹配C#在C#7.0中引入了模式匹配。从那时起,每个主要的C#版本都扩展了模式匹配功能。模式匹配是一种测试表达式以确......
  • csapp-链接
    链接:将各种代码和数据片段收集并组合成一个单一文件的过程,这个文件可被加载到内存并执行。链接可执行于编译时、加载时、运行时。代码示例:静态链接:编译器驱动程序gc......
  • ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
    客户端和服务器基于HTTP的消息交换就好比两个完全没有记忆能力的人在交流,每次单一的HTTP事务体现为一次“一问一答”的对话。单一的对话毫无意义,在在同一语境下针对某个主......
  • C#委托事件进行窗体传值
    C#委托事件进行窗体传值窗体间传值是每个学习WinForm常见问题,最初级的方法就是在窗体中先获取到要接受值窗体。然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的......
  • (non-)interactive (non-)login shell
    1loginshell当bash以loginshell形式登录的时候,bash会依次执行下列脚本,进行关键全局变量的初始化,如PATH。/etc/profile~/.bash_profile~/.bash_login~/.profile......
  • 如何用 JavaScript 编写游戏
    如何用JavaScript编写游戏今天的浏览器允许您创建具有完整图形的游戏。以下是使用JavaScript和HTML5编写简单赛车游戏的方法。浏览器现在为JavaScript开发人员提......
  • 校友聚光灯:Ben — 从音乐和音频总监到 CEO 和联合创始人
    校友聚光灯:Ben—从音乐和音频总监到CEO和联合创始人“我最终加入了CodeFellows,这太棒了。六个月的时间里,被其他真正热衷于它的人包围着,我不仅了解了软件世界,它是如......
  • LeetCode 问题之禅:第 92 天——数字和字符串
    LeetCode问题之禅:第92天——数字和字符串欢迎回到LeetCode日常练习系列.今天我做了2简单问题。让我们开始!Photoby迈克豪普特on不飞溅将整数转换为两个......
  • 强制推送本地分支覆盖远程失败git push origin master --force报错fatal: Authenticat
    当我想把本地分支强制性推到远程的master分支,执行gitpushoriginmaster--force命令时,报错如下:解决办法:重新配置用户名和邮箱gitconfig--globaluser.name"用户......
  • C++面向对象-构造函数与析构函数
    以OOP实现一个顺序栈为例,介绍构造函数与析构函数#include<iostream>#include<iterator>usingnamespacestd;/*构造函数和析构函数函数的名字和类名一样,......