最近更新于 2024-03-26 22:39

1 前言

刚才在打字的时候发现会随机失去焦点,然后又要用鼠标点一下正在输入的位置才能继续输入,特别烦。开始我怀疑是手碰到触摸板导致失去焦点,但是我用了差不多十年带触摸板的笔记本电脑,习惯中打字就不会碰到触摸板。保持疑惑就观察了一下,不触碰电脑,结果一会也会失去焦点,就说明是系统中有什么软件在夺取焦点,关键是这个夺取焦点的软件还是不可见的,所以就会表现出突然正在操作的地方失去焦点。
我在网上查了一下,找到了一段可用于捕获活动窗口的代码(https://bbs.nga.cn/read.php?tid=6997752&rand=770

#include <Windows.h>
#include <wchar.h>
#include <Psapi.h>

#pragma comment(lib, "Psapi.lib")

int main()
{
    HWND last_fore = NULL;
    wchar_t name[MAX_PATH];
    DWORD size = MAX_PATH;

    while (1)
    {
        HWND fore = GetForegroundWindow();
        if (fore != last_fore)
        {
            last_fore = fore;
            DWORD processid;
            GetWindowThreadProcessId(fore, &processid);
            HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION, NULL, processid);
            GetProcessImageFileNameW(process, name, size);
            wprintf(L"%s\n", name);
        }
        Sleep(10);
    }
    return 0;
}

用 VS 2022 编译了,这里提供我编译的 64 位可执行文件:https://pan.baidu.com/s/1tqqKZ4eGxNCCZPeUPxVYEw?pwd=3kzz
害怕有病毒就自己编译

2 分析

直接运行后,不做任何操作,当有程序成为当前活动窗口的时候就会被捕获到
等了一会,就发现箭头所指的程序成为活动窗口,然后过一会又把活动窗口还回原来的(这里就是终端窗口),然后过会又变成活动窗口
file

然后我去任务管理器搜索这个程序,发现这个程序一会出现一会消失。也就是会突然运行夺取焦点,过一会又关闭还回焦点,然后一直往复。
file

去搜了一下这个程序,发现 WSL 的 issues 上有人提过这个问题(https://github.com/microsoft/wslg/issues/894
如果是其它软件导致的焦点失去也可以去搜索查找解决方案
file
file