今天打开电脑想要做自己的事情的时候,突然发现电脑出现了频繁丢失窗口焦点的问题。在打字的时候突然断掉;开全屏打游戏的时候突然弹到桌面等,实在是烦不胜烦。网上似乎没有这个问题的记录,遂我也记录一下自己的排查过程。
结论放前面:是软件El Display Hub这个驱动(不知道具体该叫什么)的问题,在任务管理器找到“bypd_service_proc"这个进程之后,将其终止然后再卸载了就可以了。
这个软件是我之前用于将ipad作为副屏来连接电脑的驱动软件,正常来说它随着开机启动之后应该就产生一个后台进程,等待ipad这些apple设备进行连接。这次不知道可能是因为一些环境变量改变,导致进程启动失败或者怎么的,就一直关闭之后重新启动然后占用焦点。如果你也出现了焦点被占用,并且之前下过El Display Hub这个软件,那么问题就很有可能是因为它引起的。
最开始以为是输入法或者是游戏的问题,修改了输入法和重启游戏之后发现这个问题还存在,并且不只是打游戏的时候才存在,这个时候想到可能是电脑软件的问题。但是自己实在没有思路,故寻找deepseek看看有没有解决的方法。
询问deepseek时,它给了我一个很好的思路:通过软件来检测目前占用焦点的进程,从而定位问题。因此我使用了它提供给我的一个PowerShell的脚本代码如下:
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder text, int count);
}
"@
while ($true) {
$hWindow = [Win32]::GetForegroundWindow()
$sb = New-Object System.Text.StringBuilder 1024
[Win32]::GetWindowText($hWindow, $sb, 1024) | Out-Null
Write-Host "当前焦点窗口:$($sb.ToString())"
Start-Sleep -Milliseconds 500
}
该程序会0.5秒输出一次当前焦点窗口的进程名称,运行之后的输出如下:
可以看到占用焦点的进程就是名为“bypd_service_proc"的进程,在任务管理器中找到该进程之后,发现这个是El Display Hub的一个进程,至此这个问题的答案就找到了。将其停止服务之后卸载,问题解决。