Обнаружение изменений ActiveApplication в OSX через Python

Есть ли способ узнать, когда activeApplication изменяется в OSX через Python и AppKit? Я знаю, как узнать launchApplication и activeApplication (см. Другой мой вопрос здесь: Поиск текущего активного окна в Mac OS X с помощью Python)


person Community    schedule 26.12.2008    source источник


Ответы (2)


У меня есть приложение OS X, которое делает это с помощью опрос с помощью NSTimer. Я попытался найти распределенные уведомления, чтобы узнать, могу ли я найти лучший способ сделать это, но не нашел ничего ужасно полезного.

Я получал уведомления, когда приложение было запущено или выйти. что, по крайней мере, немного полезно. Вы можете увидеть их регистрацию, когда мой просыпается .

Это приложение мне очень помогло, и даже при опросе раз в секунду почти не используется процессор. Если бы я мог сделать его более ориентированным на события, я бы сделал это. :)

person Community    schedule 26.12.2008

Я не знаю "официального" / хорошего способа сделать это, но один хакерский способ сделать это - это прослушать любые распределенные уведомления и посмотреть, какие из них всегда запускаются при изменении главного приложения, чтобы вы могли слушать Вон тот:

Вы можете настроить что-то вроде этого:

def awakeFromNib(self):
    NSDistributedNotificationCenter.defaultCenter().addObserver_selector_name_object_(
        self, 'someNotification:', None, None)

def someNotification_(self, notification):
    NSLog(notification.name())

После того, как вы нашли уведомление, которое всегда срабатывает при переключении приложений, вы можете заменить первое «None» в вызове addObserver_etc_ на имя этого уведомления и проверить самое переднее приложение в вашем методе someNotification_.

В моем случае я заметил, что «AppleSelectedInputSourcesChangedNotification» срабатывает каждый раз, когда я переключаю приложения, поэтому я бы послушал это ..

Имейте в виду, что это может сломаться в любой момент, и вы, вероятно, будете проверять наличие изменений в самом переднем приложении чаще, чем необходимо.

Хотя должен быть способ получше ... надеюсь :)

person Community    schedule 26.12.2008