Это не (пока?) Поддерживается в Какао. Вы все еще можете использовать старую библиотеку Carbon для этого (которая совместима с 64 битами), но, к сожалению, Apple решила удалить всю документацию по этому вопросу.
Здесь есть хорошая статья в блоге: http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/
Статья немного длинная на мой вкус, поэтому вот короткая версия:
- (id)init {
self = [super init];
if (self) {
EventHotKeyRef hotKeyRef;
EventHotKeyID hotKeyId;
EventTypeSpec eventType;
eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyPressed;
InstallApplicationEventHandler(&mbHotKeyHandler, 1, &eventType, NULL, NULL);
hotKeyId.signature = 'hotk';
hotKeyId.id = 1337;
RegisterEventHotKey(kVK_ANSI_C, cmdKey + shiftKey, hotKeyCopyId, GetApplicationEventTarget(), 0, &hotKeyRef);
}
}
OSStatus mbHotKeyHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) {
// Your hotkey was pressed!
return noErr;
}
Горячая клавиша зарегистрирована при вызове RegisterEventHotKey(…)
. В этом случае регистрируется CMD + Shift + C.
Ключи ANSI определены в HIToolbox / Events.h, поэтому вы можете посмотреть другие ключи (просто нажмите CMD + Shift + O в XCode и введите Events.h, чтобы найти его).
Вам нужно проделать немного больше работы, если вам нужно несколько горячих клавиш или если вы хотите вызывать методы из своего обработчика, но это все по ссылке в верхней части этого ответа.
Я искал простой ответ на этот вопрос, поэтому я надеюсь, что это поможет кому-то еще ...