不久前,当按下Ctrl或Alt Gr焦点改变时,发生了一些奇怪的事情。我发现一些资源并没有解决如何找到实际进程的问题,而是如何阻止应用程序这样做,这似乎不是一个好的解决方案。
再说一遍,我实际上已经研究过了,除了破解实际问题之外什么也没找到,这是不是重复的。
我准备了一个小应用程序来检测焦点何时发生变化。据我所知,这种情况发生在我安装的所有应用程序上。下面是 Visual Studio 输出窗口的副本(我设置的应用程序正在运行):
我如何重现该问题:
- 手动聚焦记事本窗口(出现日志#1)。
- 按下 ctrl,线程相关日志和日志#2 都出现了。
输出窗口内容:
1 - 窗口句柄:723652 | 进程:记事本 | 窗口:无标题 - 记事本 | Exe 文件:C:\Windows\system32\notepad.exe 线程 0xafc 已退出,代码为 259(0x103)。2 - 窗口句柄:526994 | 进程:记事本 | 窗口:无标题 - 记事本 | Exe 文件:C:\Windows\system32\notepad.exe
我尝试过的:
- ALT按下+失去焦点后F4,尝试关闭该进程。[在启动应用程序之前]。
- 使用进程资源管理器尝试识别该进程(但由于我无法关闭它,所以根本没有帮助)
我认为正在发生的事是:
- 由于问题发生时没有其他进程接收焦点,因此必须为其分配一个空值并重新分配给旧窗口,即使它实际上并没有重新获得焦点,但根据应用程序它确实重新获得焦点;即:边框变灰,除非我再次单击它,否则我无法与窗口交互,即使它应该再次获得焦点。
我该怎么做才能识别该过程而不是仅仅阻止应用程序改变焦点?
答案1
我知道这是一个老问题,您可能无法再重现所提到的行为,但我仍然会尝试回答,因为它可能会对具有类似行为的其他人有所帮助。
检查更常见的原因
首先,我会尝试确定我的计算机上是否有任何明显的应用程序可能导致此问题。这些应用程序包括:
- 自定义快捷方式提供商
- 如果您的键盘或鼠标带有附加按钮,则可能需要使用键盘或鼠标驱动程序。原因是当您单击或按下这些附加按钮时,许多驱动程序会模拟使用某些按键。
- 一些其他可能用于模拟用户输入的软件
现在,如果这不能揭示任何更明显的原因,我将继续采用更先进的方法。
可能的代码注入
我要做的第一件事是尝试检查是否一些额外的代码可能已被注入到特定的应用程序(在您的情况下是 Notepad.exe)中,方法是检查哪些 DLL 句柄是打开的,并将它们与您可以从大多数依赖关系扫描仪中获取的 DLL 列表进行比较。
依赖项扫描器未报告的 DLL 文件的任何打开的 DLL 句柄都可能是注入到您的进程中的 DLL。
因此,如果找到一个,我会尝试弄清楚它属于哪个应用程序,然后根据该应用程序的用途来决定是否应该首先将该 DLL 注入到我的应用程序中。
如果我发现不应该从该应用程序向我的应用程序中注入任何 DLL,或者我无法确定该特定 DLL 属于哪个应用程序,我会去重命名它,然后重新启动操作系统。如果由于它被锁定而无法从工作操作系统内部重命名它,我会使用 botable CD,然后从那里重命名该文件。
重新启动后,我会首先检查该行为是否仍然有效,然后还会检查所有可能自行使用该 DLL 的应用程序,看看它们是否仍在运行。
注入我自己的代码/钩子
如果第一种方法没有返回任何结果,我会将自己的代码注入受影响的应用程序,以便记录由该特定应用程序发送或生成的特定 Windows 消息。
这种方法需要很好的编程知识,因为您需要为此编写自己的程序。
另外,如果您至少对受影响的应用程序内部有基本的了解,那么就更好了,这样您就知道需要监听哪些消息。
创建陷阱应用程序
我还会尝试创建可能受此行为影响的应用程序,然后尝试从中跟踪它。为了做到这一点,我需要对受影响的应用程序内部有基本的了解,以便成功重现该场景。
当我考虑这个问题时,我可能会在尝试之前先这样做Code injection approach
目前我想到的就是这些步骤。但我可能还会在这个过程中想到一些其他想法。