如何捕获窃取窗口焦点的进程

如何捕获窃取窗口焦点的进程

我的一位同事每隔 5 分钟左右就会失去对当前窗口的关注。现在我想知道哪个进程窃取了焦点

我发现了这个很酷的应用程序焦点程序它将列出当前的前台窗口 - 具有焦点的窗口。

每当焦点被夺走时,程序就会打印以下信息:

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。

因此我编写了一个小型 PowerShell Oneliner,它可以捕获创建的每个新进程并输出进程信息:

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

focus.exe但这并没有捕捉到任何指出的PID 。

我如何才能捕获无法启动但仍有 PID 的进程?

答案1

好的,我明白了,PID 只是没有被识别,因为 PowerShell 输出了太多内容而导致它被覆盖了。所以,当我刚刚out-file启动新进程时,我就可以在日志中看到 PID。

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

顺便说一下,焦点窃取过程是 Avira 的后台任务。:)

编辑:这是一个无需写入日志文件的解决方案。我只需要更新,$p这样每个新进程只会打印一次

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

相关内容