Як визначити, яка програма вкрала фокус в OS X?


25

Активне вікно на моїй машині час від часу втрачає фокус. Активний додаток залишається тим самим - якщо раніше я був у Chrome, я зараз все ще в Chrome - але активне вікно більше не активне. Жодне вікно не активне. Це засмучує; це сталося під час введення цього питання, і мої натискання клавіш раптово припинили реєстрацію.

Я вважаю, що якийсь інший додаток краде фокус, але сам він не має інтерфейсу для відображення, тому активне вікно стає неактивним, але активний додаток залишається активним.

Питання полягає в тому, як я можу відстежувати додаток, який ображає, щоб я міг сердито видалити його? Зазвичай у випадках крадіжок фокусу винуватця є очевидним, оскільки має фокус. У цьому випадку я заїдаю.


Ви можете спробувати Apple > Force Quit...меню, щоб побачити, чи є щось, що не повинно бути.
— Майкл Франк

1
@MichaelFrank Він не буде показувати додатки , які не мають рядків меню (наприклад , ті , з LSUIElementнабором для trueв Info.plist). Вони цілком здатні на таку поведінку.
— Даніель Бек

@DanielBeck Ааа, готча. Це зручно знати.
— Майкл Франк

1
FYI, я в основному задав це саме питання на Apple SE: Чи є спосіб виявити, яка програма краде фокус на моєму Mac?
— Кевін Рейд

tell application "System Events" to display alert ((name of first application process whose frontmost is true) as string)на жаль, не враховує процеси без рядка меню.
— Даніель Бек

Відповіді:


35

Ось сценарій, який підкаже, який додаток активується, не розповідаючи вам. Я адаптував це з відповіді на питання @ KevinReid щодо Apple SE .

Залиште його працювати в терміналі, дочекайтеся, коли додаток невдало вкраде фокус, і подивіться, який додаток відображений останнім. (Для мене: Google Drive. Інші повідомили про матеріали Symantec AV.)

#!/usr/bin/python                                                                                                       

try:
    from AppKit import NSWorkspace
except ImportError:
    print "Can't import AppKit -- maybe you're running python from brew?"
    print "Try running with Apple's /usr/bin/python instead."
    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)

Цей сценарій говорить мені, що мій винуватецьGoogle Drive [/Applications/Google Drive.app]
— MarkHu

Винувателем для мене став Symantec.
— Джош Блічер Снайдер

1
У моєму випадку це SecurityAgent [/System/Library/Frameworks/Security.framework/Versions/A/MachServices/SecurityAgent.bundle]
— Ед Рандалл

Простою програмою був помічник Microsoft Update Assistant. Я дуже ціную цю відповідь, ця проблема вже деякий час змушує мене горіхи.
— jamesbev

2
Моїм винуватцем став JetBrains Toolbox [/ Applications / JetBrains Toolbox.app/Contents/jetbrains-toolbox-cef.app], намагався оновити себе і вийшов з ладу в процесі. Велике спасибі sooooooo !! На це також було витрачено величезну кількість ресурсів.
— Габріель

1

Це буде звучати нерозумно і абсурдно просто ... У мене була така ж проблема з ноутбуком, коли я використовував трекпад або вбудовував клавіатуру. Якщо два окремі ноутбуки давали подібний досвід після впливу трохи вологи (так, я розлився по клавіатурі).

Додавання периферійної миші та клавіатури вирішило це для мене.


1
Цікаво. Я використовую зовнішню мишу та клавіатуру, але, сподіваюся, це допомагає комусь іншому. Спасибі.
— Josh Bleecher Snyder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.