Як визначити, яка програма вкрала фокус в 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.