Регистрация Hotkey - PullRequest
       2

Регистрация Hotkey

7 голосов
/ 26 января 2011

Как мне зарегистрировать глобальную горячую клавишу в Objective-C / Cocoa (Mac)?

Например, горячая клавиша, которую я хотел бы зарегистрировать, будет Alt - Cmd - D

Любая помощь будет оценена!

Ответы [ 4 ]

10 голосов
/ 26 января 2011

В GitHub есть удобная оболочка Cocoa для необходимых функций Carbon: JFHotkeyManager .Вы также можете использовать новый (начиная с 10.6) NSEvent API addGlobalMonitorForEventsMatchingMask:handler:, но он получает ключевые события, только если доступ для вспомогательных устройств включен.

7 голосов
/ 26 января 2011

Я написал класс-обёртку, чтобы сделать это намного проще ...

https://github.com/davedelong/DDHotKey

4 голосов
/ 05 июля 2011

здесь вы идете:

#import <Carbon/Carbon.h>

EventHandlerUPP hotKeyFunction;

pascal OSStatus hotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent, void *userData)
{    
    FooBar *obj =  userData;
    [obj foo];    
    return noErr;
}

@implementation FooBar

- (id)init
{
    self = [super init];
    if (self) {
        //handler
        hotKeyFunction = NewEventHandlerUPP(hotKeyHandler);
        EventTypeSpec eventType;
        eventType.eventClass = kEventClassKeyboard;
        eventType.eventKind = kEventHotKeyReleased;
        InstallApplicationEventHandler(hotKeyFunction,1,&eventType,self,NULL);
        //hotkey
        UInt32 keyCode = 80; //F19    
        EventHotKeyRef theRef = NULL;
        EventHotKeyID keyID;
        keyID.signature = 'FOO '; //arbitrary string
        keyID.id = 1;
        RegisterEventHotKey(keyCode,0,keyID,GetApplicationEventTarget(),0,&theRef);

    }        
    return self;
}

- (void)foo
{

}

@end
4 голосов
/ 26 января 2011

Вы захотите использовать функции InstallApplicationEventHandler и RegisterEventHotKey из Carbon framework.Это сообщение в блоге дает довольно хорошее практическое руководство (это то, что я использовал, когда разбирался в этом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...