Я разделяю ваше удивление, что глобальный монитор событий не видит события.В аналогичной ситуации я использовал Quartz Event Tap для аналогичной цели.Монитор глобальных событий Cocoa очень похож на события, поэтому я решил, что он будет работать.
Я поставил сигнал на kCGAnnotatedSessionEventTap
и сравнил результат от CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID)
до getpid()
, чтобы определить, когда событиясобирались в другое приложение (например, Mission Control или Exposé).(Я отключаю вкладку, когда мое приложение отказывается от активного состояния, поэтому оно должно получать события, предназначенные для другого приложения, только когда представлен подобный интерфейс наложения.)
Кстати, вы упомянули мониторинг центра уведомлений по умолчанию,но если есть уведомление о Mission Control и т. п., оно с большей вероятностью придет в распределенный центр уведомлений (NSDistributedNotificationCenter
).Так что стоит это проверить.