2010-05-24 2 views

답변

2

addGlobalMonitorForEventsMatchingMask:handler: 클래스 메서드 NSEvent을 살펴보십시오. 또한 편리하게 Shortcut Recorder을 찾을 수 있습니다.

+0

접근성이 활성화되지 않으면이 글로벌 이벤트에 대해 작동하지 않습니다. 'RegisterEventHotKey'와'InstallEventHandler'는 접근성이 가능하지 않을 때조차도 작동하는 것처럼 아래의 해결책으로가는 길이었습니다. 내게 필요한 옵션을 사용하면 실적이 저하되는 것을 알게되었습니다. – Noitidart

+1

그러면 대답은 거의 6 살입니다. 그래서 아마 더 이상 작동하지 않습니다. – Eimantas

+0

작동하지만 글로벌이 아닙니다. 접근성이 가능하다면 ** ** 글로벌이 될 수 있습니다. 나는 여기에 비틀 거린 다른 독자들의 정보를 언급하고있다. :) – Noitidart

3

이것은 (아직?) 코코아에서 지원되지 않습니다. 64 비트 호환이 가능한 오래된 Carbon 라이브러리를 여전히 사용할 수 있지만, 불행히도 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에 정의되어 있으므로 다른 키를 볼 수 있습니다 (XCode에서 CMD + Shift + O를 누르고 이벤트 입력). .h) 그것을 찾으십시오.

단축키가 여러 개인 경우 또는 처리기에서 메서드를 호출하려는 경우 조금 더 많은 작업을해야하지만이 답변 맨 위에있는 링크에 모두 나와 있습니다.

나는이 질문에 간단한 대답을 찾고 있었어요, 그래서이 다른 사람을 도움이되기를 바랍니다 ...

+0

+1 감사합니다. 잠시 시간이 있다면, 여기에 관련 질문을했습니다. http://stackoverflow.com/q/20169242/830899 – unsynchronized

+0

이것이 글로벌 단축키를 등록하는 올바른 방법인지 확인합니다. 방금했습니다. 그래도 생성 된 스레드에서 수행 할 수 없었습니다. "메인 스레드"에서 수행해야했습니다. 생성 된 스레드에서이 작업을 수행 할 수 있습니까? – Noitidart

관련 문제