スクリーンセーバーがアクティブになるのを妨げているプロセスを特定するWindowsアプリケーションはありますか?
スクリーンセーバーがアクティブになるのを妨げているプロセスを特定するWindowsアプリケーションはありますか?
回答:
powercfgはWindowsに組み込まれており、多くの電源管理設定を制御および表示できます。
powercfg -energy -trace
これにより、非常に詳細な電源管理イベントログ、energy-trace.etlが作成されます。イベントビューアーで開き、イベントソース:Kernel-Power、インクルードイベントID:62でログをフィルターします。
これにより、次のようなイベントが得られます。
アプリケーションまたはサービス\ Device \ HarddiskVolume1 \ games \ Steam \ Steam.exeは、コード0x3でユーザーの電源管理設定を上書きしています。
コードは、スクリーンセーバー、モニターのスリープ、または別の状態遷移が防止されたかどうかによって異なる場合があります。
Event Viewer
| Event Viewer (Local)
ツリーをクリック| Action
| Open Saved Log
| open C:\Windows\System32\energytrace.etl
新しいログ形式に変換するよう指示します。Windows 10で
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.
これは、Originがビデオを再生しており、これがスクリーンセーバーの実行を妨げていたことを示しています。
犯人は通常、メディアプレーヤーだと思います。ビデオを再生するときだけだと思うかもしれませんが、スクリーンセーバーに手を出さない音楽プレーヤーもいます。たとえば、Amazon MusicとGrooveを今日開いて一時停止したところ、1時間経っても画面のロックが解除されたままでした。
どちらが責任があるのかはわかりませんが、私が実行していたIDEとブラウザ上でそれらを疑っています。どちらも画面をロックします。
私はこれを行うプログラムを知りませんが、調べる方法は、スレッドが現在スクリーンセーバーのアクティブ化をブロックしている場合に値ES_DISPLAY_REQUIREDを保持するGetThreadExecutionState()関数を使用することです。
この関数をシステム内のすべてのスレッドに適用し、見つかったスレッドでGetProcessIdOfThreadを呼び出すと、スクリーンセーバーをブロックしているプロセスが見つかります。