2009-12-16 5 views
4

Я пытаюсь создать утилиту, которая не открывает окно при его исполнении и которое будет активировано с помощью горячей клавиши; Я читал, что в настоящее время у Cocoa нет функции для этого, и что я должен использовать устаревшую функцию Carbon.Как перехватить горячую клавишу в какао, когда окно приложения неактивно

Не существует ли способа использования глобальных горячих клавиш в какао? Что мне делать: дождитесь, пока Cocoa представит функцию для этого, или используйте функцию углерода до тех пор, пока аналогичная функция не будет введена в Cocoa?

ответ

7

Использование the Carbon Event Manager's RegisterEventHotKey function. Эта функция поддерживается в 64-разрядной версии (обратите внимание, что ей не хватает «доступной в 64-разрядной» заметке о доступности).

С другой стороны, новый метод addGlobalMonitorForEventsMatchingMask:handler: NSEvent в Snow Leopard - это , а не - самый простой способ реализовать горячую клавишу. Во-первых, для этого требуется, чтобы у пользователя был доступ к вспомогательным устройствам; кроме того, он требует, чтобы вы изучали каждое событие самостоятельно, по сравнению с системой RegisterEventHotKey, которая только вызывает вашу функцию обратного вызова, когда пользователь нажимает конкретный ключ, который вы зарегистрировали.

+0

Я пытался избежать использования функции для библиотеки, которая может быть объявлена ​​неподдерживаемой от Apple в любой момент. Насколько я вижу, Carbon, похоже, не устареет в ближайшем будущем, даже если Apple всегда заявляла, что Carbon - это только библиотека, позволяющая перейти к Mac OS X, и это можно было бы удалить в любое время.
Не имеет смысла ждать, пока класс Cocoa будет обрабатывать горячие клавиши, когда класс может быть введен между 5 годами. – kiamlaluno

+0

Apple никогда не говорила об этом. Название «Carbon» было получено из-за того, что «вся жизнь основана на углероде». Какао - это удобная обертка, а не основа чего-либо важного. –

+0

В типичной форме Apple они удалили документацию для функции RegisterEventHotKey' со своего веб-сайта. Однако по крайней мере одно приложение-образец ([UIElementInspector] (https://developer.apple.com/library/prerelease/content/samplecode/UIElementInspector/Introduction/Intro.html)) все еще использует его (в ['AppDelegate.m' ] (https://developer.apple.com/library/prerelease/content/samplecode/UIElementInspector/Listings/AppDelegate_m.html#//apple_ref/doc/uid/DTS10000728-AppDelegate_m-DontLinkElementID_4)), и он все еще документирован в 'CarbonEvents.h' заголовочный файл. –

2

Посмотрите на ярлык Recorder (http://wafflesoftware.net/shortcut/), который использует диспетчер событий углерода для глобальных горячих клавиш, он также позволяет вам изменять пользователя, чтобы изменить HotKey (если это то, что вы хотите).

И посмотреть этот проект/код о том, как его реализовать: http://github.com/sdegutis/SDGlobalShortcuts.

Смежные вопросы