Windows 용으로이 작업을 수행 할 수 있다는 것을 알고 있으며 XGrabKey
을 X11 용으로 사용할 수 있지만 Mac OS X은 어떻게해야합니까? 나는 응용 프로그램 창이 비활성화되어있을 때에도 호출 할 수있는 바로 가기 키를 설정할 수있는 클래스를 만들고 싶습니다.Mac OS X에서 글로벌 키보드 후크를 어떻게 구현합니까?
답변
addGlobalMonitorForEventsMatchingMask:handler:
클래스 메서드 NSEvent
을 살펴보십시오. 또한 편리하게 Shortcut Recorder을 찾을 수 있습니다.
이것은 (아직?) 코코아에서 지원되지 않습니다. 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) 그것을 찾으십시오.
단축키가 여러 개인 경우 또는 처리기에서 메서드를 호출하려는 경우 조금 더 많은 작업을해야하지만이 답변 맨 위에있는 링크에 모두 나와 있습니다.
나는이 질문에 간단한 대답을 찾고 있었어요, 그래서이 다른 사람을 도움이되기를 바랍니다 ...
+1 감사합니다. 잠시 시간이 있다면, 여기에 관련 질문을했습니다. http://stackoverflow.com/q/20169242/830899 – unsynchronized
이것이 글로벌 단축키를 등록하는 올바른 방법인지 확인합니다. 방금했습니다. 그래도 생성 된 스레드에서 수행 할 수 없었습니다. "메인 스레드"에서 수행해야했습니다. 생성 된 스레드에서이 작업을 수행 할 수 있습니까? – Noitidart
- 1. Mac OS X에서
- 2. Mac OS X에서 showkey equivalent?
- 3. Mac OS X에서 권한은 어떻게 전파됩니까?
- 4. Mac OS X에서 DTrace를 어떻게 작성합니까?
- 5. Mac OS X에서 .app 파일을 어떻게 선택합니까?
- 6. Mac OS X에서 사용할 라이브러리는 어떻게 정의합니까?
- 7. Mac OS X에서 Java의 미래
- 8. Mac OS X에서 Eclipse의 에뮬레이터
- 9. Mac OS X에서 GetTextExtentPoint32가 동일합니다
- 10. 피치 감지 Mac OS X에서
- 11. Mac OS X에서 HID_Utilities.h 누락
- 12. Mac OS X에서 어셈블리 편집
- 13. Mac OS X에서 Qwt 사용
- 14. Mac OS X에서 내보내기 명령
- 15. Mac OS X에서 원격 디버깅
- 16. Mac OS X에서 virtualenv 사용
- 17. Mac OS X에서 PATH를 복원
- 18. Mac OS X에서 "실행하려면 클릭하십시오"
- 19. 글로벌 키보드 후크를 사용하여 키를 보내는 방법은 무엇입니까?
- 20. Xcode없이 Mac OS X에서 VST 플러그인 만들기
- 21. Mac OS X에서 mail.app의 메모에 액세스하려면 어떻게해야합니까?
- 22. Mac OS X에서 교차 컴파일 x
- 23. Mac OS X에서 파일 연결을 변경하는 방법
- 24. Mac OS X에서 dtrace ustack() 헬퍼가 있습니까?
- 25. Mac OS X에서 dylib 사용 방법 (C++)
- 26. Mac OS X에서 사용자 활동 감지
- 27. Mac OS X에서 SSD를 감지하는 방법은 무엇입니까?
- 28. Mac OS X에서 루비의 재귀 chmod?
- 29. Mac OS X에서 즉시 Java를 사용하십시오.
- 30. Mac OS X에서 '소스 목록'을 만들려면 어떻게해야합니까?
접근성이 활성화되지 않으면이 글로벌 이벤트에 대해 작동하지 않습니다. 'RegisterEventHotKey'와'InstallEventHandler'는 접근성이 가능하지 않을 때조차도 작동하는 것처럼 아래의 해결책으로가는 길이었습니다. 내게 필요한 옵션을 사용하면 실적이 저하되는 것을 알게되었습니다. – Noitidart
그러면 대답은 거의 6 살입니다. 그래서 아마 더 이상 작동하지 않습니다. – Eimantas
작동하지만 글로벌이 아닙니다. 접근성이 가능하다면 ** ** 글로벌이 될 수 있습니다. 나는 여기에 비틀 거린 다른 독자들의 정보를 언급하고있다. :) – Noitidart