Зарегистрировать глобальную горячую клавишу без поддержки вспомогательных устройств - PullRequest
2 голосов
/ 19 февраля 2012

Используя этот код, я могу зарегистрировать глобальный обработчик событий:

[NSEvent addGlobalMonitorForEventsMatchingMask: NSKeyDownMask 
                                       handler: ^(NSEvent *incomingEvent) {

           NSString *chars = [[incomingEvent characters] lowercaseString];
           unichar character = [chars characterAtIndex:0];    

           // do something useful
           NSLog(@"keydown globally! Which key? This key: %c", character);

        }];

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

Сформируйте документацию:

Key-related events may only be monitored if accessibility is enabled or if your 
application is trusted for accessibility access (see AXIsProcessTrusted).

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

Хотя я не нашел решения в документах Apple, решение должно существовать.Например, загруженная MAS версия Alfred позволяет определить горячую клавишу.

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

Поскольку я в основном хочупоказать / скрыть «глобальную» неактивирующую панель, я, вероятно, должен просто подготовить системный сервис.Должен ли я?

1 Ответ

2 голосов
/ 19 февраля 2012

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

Справочник по службам Quartz Event
Пример кода от Mac OS X Internals

...