我机器上的活动窗口偶尔会失去焦点。活动应用程序保持不变——如果我之前使用的是 Chrome,那么我现在仍然在使用 Chrome——但活动窗口不再处于活动状态。没有窗口处于活动状态。这令人沮丧;在输入这个问题时发生了这种情况,我的按键突然停止了记录。
我相信其他一些应用程序正在窃取焦点,但它本身没有可显示的 UI,因此活动窗口变为非活动状态,但活动应用程序仍然保持活动状态。
问题是:我该如何找到有问题的应用程序,以便愤怒地删除它?通常在焦点被盗的情况下,罪魁祸首很明显,因为它拥有焦点。在这种情况下,我被难住了。
答案1
这是一个脚本,它会在不通知你的情况下告诉你哪个应用程序正在激活。我根据对@KevinReid 的回答改编了它关于 Apple SE 的问题。
让它在终端中运行,等待恶意应用程序窃取焦点,然后查看哪个应用程序排在最后。(对我来说:Google Drive。其他人报告了 Symantec AV 的东西。)
#!/usr/bin/python
try:
from AppKit import NSWorkspace
except ImportError:
print("Can't import AppKit -- try `pip install PyObjC`")
print("(see instructions for running in a venv with PyObjC)")
exit(1)
from datetime import datetime
from time import sleep
last_active_name = None
while True:
active_app = NSWorkspace.sharedWorkspace().activeApplication()
if active_app['NSApplicationName'] != last_active_name:
last_active_name = active_app['NSApplicationName']
print('%s: %s [%s]' % (
datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
active_app['NSApplicationName'],
active_app['NSApplicationPath']
))
sleep(1)
注意 [2022]:较新版本的 macOS 不附带类库此脚本需要的绑定。如果出现 ImportError,请按照以下步骤运行脚本:
- 创建一个目录,并将上述脚本保存为“focus-stealer.py”
- 在终端中在那个目录中输入以下命令:
(这将创建一个新的、独立的 Python 虚拟环境,仅用于此脚本,并将 PyObjC 安装到其中。这避免了修改系统 Python 安装或需要使用须藤。/usr/bin/python3 -m venv venv ./venv/bin/python -m pip install PyObjC
- 现在你可以运行脚本了。在终端中在同一目录中跑步:
(以后,您可以直接跳到这一步——无需重新安装。)./venv/bin/python ./focus-stealer.py
答案2
这听起来很傻,而且简单得离谱……当我使用触控板或内置键盘时,我的笔记本电脑也遇到了同样的问题。两台不同的笔记本电脑在接触到一点水分后也出现了类似的情况(是的,我把东西洒在了键盘上)。
添加外围鼠标和键盘解决了这个问题。