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