解决软件禁止windows自动熄屏和睡眠的方法

最近发现笔记本不会自动休眠,经过排查发现是由于一款软件导致的,但是又不能不用,经过一段时间的摸索,终于把问题解决了。

先介绍一下具体操作原理,它就是通过Windows 电源管理命令来管控具体的某一个软件的对系统的电源请求。

具体如下:

先来看官方文档介绍Powercfg 命令行选项

选项 说明
/?、-help 显示有关命令行参数的信息。
/list、/L 列出所有电源方案。
/query、/Q 显示电源方案的内容。
/change、/X 修改当前电源方案中的设置值。
/changename 修改电源方案的名称和说明。
/duplicatescheme 复制电源方案。
/delete、/D 删除电源方案。
/deletesetting 删除电源设置。
/setactive、/S 使某个电源方案在系统上处于活动状态。
/getactivescheme 检索当前活动的电源方案。
/setacvalueindex 设置当系统由交流电源供电时与某项电源设置关联的值。
/setdcvalueindex 设置当系统由直流电源供电时与某项电源设置关联的值。
/import 从文件中导入所有电源设置。
/export 将电源方案导出到文件。
/aliases 显示所有别名及其相应的GUID。
/getsecuritydescriptor 获取与指定的电源设置、电源方案或操作相关联的安全描述符。
/setsecuritydescriptor 获取与电源设置、电源方案或操作关联的安全描述符。
/hibernate、/H 启用和禁用休眠功能。
/availablesleepstates、/A 报告系统上可用的睡眠状态。
/devicequery 返回符合指定条件的设备列表。
/deviceenableawake 启用设备将系统从睡眠状态唤醒的功能。
/devicedisablewake 禁用设备将系统从睡眠状态唤醒的功能。
/lastwake 报告有关哪个组件将系统从上次睡眠转换状态唤醒的信息。
/waketimers 枚举活动的唤醒计时器。
/requests 枚举应用程序和驱动程序电源请求。
/requestsoverride 为特定的进程、服务或驱动程序设置电源请求重写。
/energy 分析系统中常见的能效和电池寿命问题。
/batteryreport 生成电池使用情况的报告。
/sleepstudy 生成诊断系统电源转换报告。
/srumutil 转储来自系统资源使用情况监视器 (SRUM) 的能源估算数据。
/systemsleepdiagnostics 生成系统睡眠转换的诊断报告。
/systempowerreport 生成诊断系统电源转换报告。

详细的具体命令使用方法在这里就不阐述了,感兴趣的可以去参考官方文档自己测试。

大家看完以后会发现有一个 /REQUESTS 命令介绍是枚举应用程序和驱动程序的电源请求,执行这个命令,就能列出驱动程序和应用程序的电源请求。

语法是:

1
powercfg /requests

于是我们就自己测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows

PS C:\Users\rkdawn> powercfg /requests
DISPLAY:
[PROCESS] \Device\HarddiskVolume4\电脑软件\抖音直播监控录制工具\抖音直播监控录制工具.exe

SYSTEM:
[PROCESS] \Device\HarddiskVolume4\电脑软件\抖音直播监控录制工具\抖音直播监控录制工具.exe

AWAYMODE:
无。

执行:
无。

PERFBOOST:
无。

ACTIVELOCKSCREEN:
无。

PS C:\Users\rkdawn>

通过执行枚举电源请求命令我们能发现,有一个软件请求了 DISPLAY和SYSTEM两个电源请求,根据字面意思可以知道这个软件阻止电脑自动息屏以及电脑自动睡眠。
然后在官方文档中发现/REQUESTSOVERRIDE这个命令的介绍是为特定的进程、服务或驱动程序设置电源请求重写。 如果未指定任何参数,此命令将显示当前的电源请求重写列表。也就是说我们只要使用/REQUESTSOVERRIDE忽略指定的软件、驱动、服务的电源请求,就可以实现阻止软件、驱动、服务导致的显示器不自动息屏,以及系统不自动休眠。

语法是:

1
powercfg /requestsoverride [caller_type name request]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
powercfg /REQUESTSOVERRIDE -?

POWERCFG /REQUESTSOVERRIDE [<CALLER_TYPE> <NAME> <REQUEST>]

描述:
为特定进程、服务或驱动程序设置电源请求替代。
如果未指定任何参数,则该命令显示
电源请求替代的当前列表。

参数列表:
<CALLER_TYPE> 指定下列调用方类型之一: PROCESS、
SERVICE、DRIVER。可以通过调用
"POWERCFG /REQUESTS" 命令获取。

<NAME> 指定调用方名称。这是通过
调用 "POWERCFG /REQUESTS" 命令返回的名称。

<REQUEST> 指定下列一个或多个电源请求类型:
DISPLAY、SYSTEM、 AWAYMODE。

示例:
POWERCFG /REQUESTSOVERRIDE PROCESS wmplayer.exe DISPLAY SYSTEM

通过帮助程序能看到“忽略电源请求”这条命令的使用方式

1
POWERCFG  /REQUESTSOVERRIDE [<应用程序类型> <程序名称> <电源请求类型>]

最终命令

1
POWERCFG /REQUESTSOVERRIDE PROCESS 抖音直播监控录制工具.exe DISPLAY SYSTEM

接下来执行命令后测试,然后无参调用REQUESTSOVERRIDE来查看我们的设置是否成功

1
2
3
4
5
6
7
PS C:\Users\rkdawn> POWERCFG /REQUESTSOVERRIDE
[SERVICE]

[PROCESS]
抖音直播监控录制工具.exe DISPLAY SYSTEM

[DRIVER]

但是这时候会发现一个问题,经过我测试,貌似每次更新文件以后都要重新添加,例如改变了版本号,那该如何取消呢,经过我搜索后发现,有大佬给出了答案。

那就是添加的这个是可以在注册表删除的,老规矩,win+R打开CMD输入regedit进入注册表

它的目录是

1
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerRequestOverride\Process

结语:感谢大佬提供的教程和思路。

PS:参考文章:Windows系统禁止软件、驱动阻止系统息屏、睡眠一劳永逸解决WIN10所有睡眠问题