Как можно обнаружить переключатель управления полетом или Command-Tab, заменяющий программу в OS X? - PullRequest
18 голосов
/ 20 февраля 2012

Я пытаюсь использовать CGAssociateMouseAndMouseCursorPosition (NO) в программе. Это отключает мышь от экранного курсора, когда ваше приложение «на переднем плане». К сожалению, это также отключает его, когда Mission Control или переключатель приложений или кто знает, что еще появляется.

Пока я знаю:

  • Приложение все еще активно.
  • Окно по-прежнему является ключевым.
  • При появлении этих сообщений в центр уведомлений по умолчанию ничего не отправляется.
  • Приложение прекращает получать события перемещения мыши, но NSEvent addGlobalMonitorForEventsMatchingMask: handler: также не получает их, что по меньшей мере странно. Он должен получать любые события, не доставленные в мое приложение. (Я планировал обнаружить пропущенные события, чтобы знать, когда снова связать мышь.

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

Ответы [ 2 ]

5 голосов
/ 10 марта 2013

Я разделяю ваше удивление, что глобальный монитор событий не видит события.В аналогичной ситуации я использовал Quartz Event Tap для аналогичной цели.Монитор глобальных событий Cocoa очень похож на события, поэтому я решил, что он будет работать.

Я поставил сигнал на kCGAnnotatedSessionEventTap и сравнил результат от CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID) до getpid(), чтобы определить, когда событиясобирались в другое приложение (например, Mission Control или Exposé).(Я отключаю вкладку, когда мое приложение отказывается от активного состояния, поэтому оно должно получать события, предназначенные для другого приложения, только когда представлен подобный интерфейс наложения.)

Кстати, вы упомянули мониторинг центра уведомлений по умолчанию,но если есть уведомление о Mission Control и т. п., оно с большей вероятностью придет в распределенный центр уведомлений (NSDistributedNotificationCenter).Так что стоит это проверить.

0 голосов
/ 09 августа 2012

Вы пытались задать NSRunningApplication?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...