网站首页 > 技术文章 正文
通常我们使用电脑过程中会设置多长时间不操作,电脑就会灭屏、睡眠甚至是休眠。如果电脑进入睡眠或者休眠模式,电脑运行的程序将不再执行。如果我们设计的桌面程序一直在执行某种操作,比如持续的USB通信,操作人可能会离开很久,这个时候,我们不希望电脑进入睡眠或者休眠模式。那么该如何实现这一功能呢?
系统中相关接口文件是提供了这一功能,即调用如下方法即可:
[DllImport("kernel32")]
private static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);
[Flags]
private enum ExecutionState : uint
{
SystemRequired = 0x01,
DisplayRequired = 0x02,
[Obsolete("This value is not supported.")]
UserPresent = 0x04,
AwayModeRequired = 0x40,
Continues = 0x80000000,
}
如上所示,只需要设置系统状态即可,ExcutionState各个枚举变量的含义为:SystemRequired,强行设置系统IDLE计时器,使得系统一直处于工作态;DisplayRequired,通过重置显示器IDLE计时器,使得显示器一直处于显示状态;Continues,系统状态维持当前状态,直到下一次方法调用或者标志位改变。
Microsoft官网参考链接为:SetThreadExecutionState function (winbase.h) - Win32 apps | Microsoft Learn
具体调用方法如下:
// 设置此线程此时开始一直将处于运行状态,此时计算机不应该进入睡眠状态。
// 此线程退出后,设置将失效。
// 如果需要恢复,请调用 <"RestoreForCurrentThread"/> 方法。
// <param name="keepDisplayOn">
// 表示是否应该同时保持屏幕不关闭。
// 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。
public static void PresentForCurrentThread(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.Continues|ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.Continues| ExecutionState.SystemRequired));
}
//恢复此线程的运行状态,操作系统现在可以正常进入睡眠状态和关闭屏幕。
public static void RestoreForCurrentThread()
{
SetThreadExecutionState(ExecutionState.Continues);
}
// 重置系统睡眠或者关闭屏幕的计时器,这样系统睡眠或者屏幕能够继续持续工作设定的超时时间。
// <param name="keepDisplayOn">
// 表示是否应该同时保持屏幕不关闭。
// 对于游戏、视频和演示相关的任务需要保持屏幕不关闭;而对于后台服务、下载和监控等任务则不需要。
public static void ResetIdle(bool keepDisplayOn)
{
SetThreadExecutionState(keepDisplayOn ? (ExecutionState.SystemRequired | ExecutionState.DisplayRequired) : (ExecutionState.SystemRequired));
}
因此,只要调用ResetIdle(true)就可以实现屏幕常亮并且系统运行正常。如果要取消只要调用RestoreForCurrentThread()即可。
猜你喜欢
- 2024-12-15 如何在 Mac 上关闭睡眠模式? macbook关闭睡眠
- 2024-12-15 软件分享 | 那些好用的电脑软件05篇 防止电脑休眠软件
- 2024-12-15 解决 Mac 休眠掉电的几个方法 macbook休眠要拔掉电源吗
- 2024-12-15 新手如何让Windows11电脑进入睡眠模式?
- 2024-12-15 鼠标右键秒关Win10 你要不要? 鼠标右键怎么关闭
- 2024-12-15 win7怎么关闭睡眠功能?win7关闭休眠的方法
- 2024-12-15 微软官方:非特殊情况电脑用完后不要关机,这些知识你知道吗?
- 2024-12-15 6款Windows必装的神级软件,知乎10W人推荐,让你的电脑更好用!
- 2024-12-15 Win10定时休眠和唤醒 win10定时唤醒睡眠
- 2024-12-15 不用电脑时,“睡眠”,“待机”还是“关机”好?
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)