Как я могу сказать, какое приложение украло мой фокус в OS X?
Активное окно на моей машине иногда теряет фокус. Активное приложение остается прежним - если я был в Chrome раньше, я все еще в Chrome - но активное окно больше не активно. Окно не активно. Это расстраивает; это произошло во время ввода этого вопроса, и мои нажатия клавиш внезапно перестали регистрироваться.
Я считаю, что какое-то другое приложение крадет фокус, но само по себе оно не имеет интерфейса для отображения, поэтому активное окно становится неактивным, но активное приложение остается активным.
Вопрос в том, как отследить нарушающее приложение, чтобы я мог его гневно удалить? Обычно в случаях кражи фокуса виновник очевиден, потому что у него есть фокус. В этом случае я в тупике.
2 ответа
Вот скрипт, который скажет вам, какое приложение активируется, не сообщая вам. Я адаптировал его от ответа на вопрос @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)
Это будет звучать глупо и нелепо просто... У меня была такая же проблема с ноутбуком, когда я использовал трекпад или встроенную клавиатуру. Если бы два отдельных ноутбука давали похожий опыт после небольшого количества влаги (да, я пролил на клавиатуру).
Добавление периферийной мыши и клавиатуры решило это для меня.