我如何知道 OS X 中哪个应用程序窃取了我的焦点?

我如何知道 OS X 中哪个应用程序窃取了我的焦点?

我机器上的活动窗口偶尔会失去焦点。活动应用程序保持不变——如果我之前使用的是 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,请按照以下步骤运行脚本:

  1. 创建一个目录,并将上述脚本保存为“focus-stealer.py”
  2. 在终端中在那个目录中输入以下命令:
    /usr/bin/python3 -m venv venv
    ./venv/bin/python -m pip install PyObjC
    
    (这将创建一个新的、独立的 Python 虚拟环境,仅用于此脚本,并将 PyObjC 安装到其中。这避免了修改系统 Python 安装或需要使用须藤
  3. 现在你可以运行脚本了。在终端中在同一目录中跑步:
    ./venv/bin/python ./focus-stealer.py
    
    (以后,您可以直接跳到这一步——无需重新安装。)

答案2

这听起来很傻,而且简单得离谱……当我使用触控板或内置键盘时,我的笔记本电脑也遇到了同样的问题。两台不同的笔记本电脑在接触到一点水分后也出现了类似的情况(是的,我把东西洒在了键盘上)。

添加外围鼠标和键盘解决了这个问题。

相关内容