有什么方法可以检测是什么禁用了屏幕保护程序?

Bre*_*212 24 windows screensaver diagnostic

是否有任何 Windows 应用程序可以确定阻止屏幕保护程序变为活动状态的进程?

Mir*_*ral 19

powercfg /requests从管理命令提示符运行。例如,我的打印:

DISPLAY:
[PROCESS] \Device\HarddiskVolume8\Games\Origin\Origin.exe
Playing video

SYSTEM:
[DRIVER] Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0900&SUBSYS_10438560&REV_1000\4&9793a48&0&0001)
An audio stream is currently in use.

AWAYMODE:
None.
Run Code Online (Sandbox Code Playgroud)

这表明 Origin 正在播放视频,这会阻止屏幕保护程序运行。

  • 我的打印出所有“none”,但屏幕保护程序仍然没有激活。 (2认同)

W1N*_*Zr0 17

powercfg内置于 Windows 中,可让您控制和查看大量电源管理设置。

powercfg -energy -trace
Run Code Online (Sandbox Code Playgroud)

这将创建一个非常详细的电源管理事件日志,energy-trace.etl。使用事件查看器打开它并按事件源过滤日志:Kernel-Power,包括事件 ID:62。

这应该为您提供如下所示的事件:

应用程序或服务 \Device\HarddiskVolume1\games\Steam\Steam.exe 已使用代码 0x3 覆盖用户电源管理设置。

根据屏幕保护程序、监视器睡眠或其他状态转换是否被阻止,代码可能会有所不同。

  • 在 Windows 10 中,只需运行 powercfg /energy 就会创建一个网页。 (5认同)
  • 如果这让其他人发疯:打开energytrace.etl 打开`Event Viewer` | 单击树中的“事件查看器(本地)”| `行动` | `打开保存的日志` | 打开`C:\Windows\System32\energytrace.etl` 告诉它转换为新的日志格式。适用于 Windows 10。 (2认同)

Sec*_*att -2

我不知道有任何程序可以执行此操作,但找到方法是通过 GetThreadExecutionState() 函数,如果线程当前阻止激活屏幕保护程序,该函数将保存值 ES_DISPLAY_REQUIRED。

如果将此函数应用于系统中的所有线程,然后在找到的线程上调用 GetProcessIdOfThread,您将找到阻止屏幕保护程序的进程。