如何查找出阻止屏幕关闭的应用

适用于:Windows 10 神州网信政府版

1.概要:

使用 Win32 API SetThreadExecutionState 可以阻止进入屏幕保护程序,也能阻止屏幕关闭、阻止系统睡眠。这很方便,但也可能造成各种应用都试图阻止屏幕关闭。

2.操作步骤/更多信息:

通过系统自带的 powercfg 来查询相关的应用。以管理员权限打开cmd或者powershell命令行终端:

powercfg /requests

/requests 参数的作用是‎“列举应用程序和驱动程序的电源请求。电源请求可防止计算机自动关闭显示屏或进入低功耗睡眠模式。‎”

如果有某个应用或驱动设置了阻止屏幕关闭,那么就会出现在此命令执行的结果里面。

比如在浏览器中播放视频或音频:

当关闭浏览器中播放的视频或音频文件后,再次执行此命令,发现已经没有进程阻止屏幕关闭和系统睡眠:

有时候,应用并没有直接阻止屏幕关闭,而是在一段时间之内试图不断重置睡眠计时器,这种情况,需要使用这个新命令。

powercfg -energy -trace

运行这个命令,需要等待 60 秒,就像下面这样:

注意:等待期间不要移动鼠标或键盘等,因为鼠标和键盘事件也会影响到追踪结果!

等待完成后,它会提示“跟踪完成”,但不会直接提供任何结果。结果都存在了当前执行命令的目录下的 energy-trace.etl 日志文件里面,例如 C:\energy-trace.etl。

这个文件可以用事件查看器打开。

1)右键开始按钮,选择“事件查看器”。

2)操作→打开保存的日志

查找“energy-trace.etl”文件,例如“C:\energy-trace.etl”,然后打开。

3)在保存的日志中找到可疑记录

由于日志太多,建议右击日志选择“筛选当前日志(L)…”,在筛选器里将事件来源选成“Kernel-Power”,事件 ID 设为 63。

查看几条日志。提示的是:

The application or service 0x0 is attempting to update the system timer resolution to a value of 0x0.

即有程序试图重置系统计时器。

在详细信息里,可以找到是哪个程序:

可以看到,在这条记录里,是“chrome.exe”。所以,可以去chrome浏览器标签里找找,是否有正在播放的视频或音频等。