web-dev-qa-db-ja.com

ウィンドウフォーカスを盗むプロセスをキャッチする方法

私の同僚の1人は、それぞれ5分ほどで現在のウィンドウに集中できなくなります。今、私はどのプロセスが焦点を盗むのだろうかと思っています

私はこのクールなアプリケーションを見つけました focus.exe 現在のフォアグラウンドウィンドウを一覧表示します-フォーカスのあるウィンドウ。

フォーカスが盗まれたときはいつでも、プログラムはこの情報を印刷しました:

9524:Could not open process | Wed Oct 18 14:57:15 2017
19304:Could not open process | Wed Oct 18 14:57:15 2017

ご覧のとおり、開くことができなかったプロセスによってフォーカスが盗まれるので、この情報はあまり役に立ちません。私を助けてくれるのは、それでもプロセスPIDがログに記録されることです。

そこで、作成されるすべての新しいプロセスをキャッチし、プロセス情報を出力するPowerShellOnelinerを作成しました。

$p = ps ; while (1) { ps | ? { $_.id -notin $p.Id } ; sleep -milliseconds 1 }

しかし、これはPIDのいずれもキャッチしませんでしたfocus.exe 指摘した。

開始できなかったが、PIDを取得したプロセスをキャッチするにはどうすればよいですか?

4
SimonS

わかりました。PowerShellが出力しすぎて上書きされたため、PIDが認識されませんでした。そのため、新しいプロセスをout-fileしただけで、ログにPIDが表示されました。

$p = ps ; while (1) { ps | ? { $_.id -notin $p.Id } | out-file C:\install\PID.txt -append ; sleep -milliseconds 1 }

フォーカスを盗むプロセスは、Aviraのバックグラウンドタスクでした。 :)

編集:ここでは、ログファイルを書き込まないソリューションです。 $pを更新する必要があったので、新しい各プロセスは1回だけ印刷されます

$p = ps ; while (1) { ps | ? { $_.id -notin $p.Id } ; $p = ps ; sleep -milliseconds 1 }
3
SimonS