Cocoa NSStatusBar Global HotKey

Я создал приложение NSStatusBar cocoa, которое находится в строке состояния системы.

Я хочу назначить горячую клавишу, чтобы при нажатии она переключает мои приложения и показывает меню.

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

Возможно ли это?, Если кто-то думает, что способ назначить глобальную горячую клавишу лучше всего, разместите ее.

Спасибо.


Один из учебников по горячим клавишам, который я нашел, был на http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/ для всех, кого это интересует.

Ответы

Ответ 1

Существует фактический API "горячих клавиш" , который все еще существует в Snow Leopard и доступен в 64-разрядной версии. Он сконструирован специально для этой цели, в отличие от методов NSEvent, которые по существу являются только блочной оболочкой вокруг CGEventTaps.

Различие заключается в том, что методы NSEvent (или CGEventTaps напрямую) заставляют вас смотреть каждое событие, входящее в систему, тогда как API горячих клавиш вызывает вашу функцию только тогда, когда пользователь нажимает вашу горячую клавишу.

Ответ 2

Если вы настроите таргетинг на 10.6+, есть новый API для NSEvent, который может делать глобальные горячие клавиши. Для получения дополнительной информации ознакомьтесь с этим замечательным сообщением в блоге: http://cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard

EDIT (спустя долгое время)

Укусить мой собственный рог немного: я никогда не смог бы получить такие вещи, как PTHotKey и другие библиотеки, чтобы работать так, как я ожидал, поэтому я в конце концов отказался и написал свою собственную оболочку HotKey. Он имеет очень простой API (вы даете ему key code, модификаторы, цель и действие), что даже поддерживает забавные вещи, такие как 10.6 блоков. Вы можете скачать исходный код здесь: http://github.com/davedelong/DDHotKey