문제

저는 OSX 개발에 상당히 익숙하지 않으므로 쉽지만 Google은 도움이되지 않았습니다.

새로운 Apple 키보드 (Play, Pause 등)에서 찾은 미디어 키에 액션을 바인딩하려고합니다. 일반 핫키 API를 사용 하여이 키에 묶을 수는 없지만 iTunes가 명확하게 관리하므로 가능해야합니다. 이것을 달성하는 까다로운 미등록 API가 있습니까? 어떤 도움이든 큰 감사를드립니다.

도움이 되었습니까?

해결책

더 광범위한 인터넷 검색 후에 http://www.rogueamoeba.com/utm/2007/09/29/ 문제를 해결하는 것 같습니다. 쉬운 솔루션은 없지만 실제 코코아 앱을 개발하고 있다면 적어도 가능해 보입니다.

다른 팁

내 조사를 통해 운영 체제는 다른 프로세스에서 이용할 수 있기 전에 이러한 주요 이벤트를 포획하고 있습니다. 나는 cgeventtap을 만들었습니다.

int main(int argc, char *argv[]) {
CFMachPortRef      eventTap;
CFRunLoopSourceRef runLoopSource;

eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventMaskForAllEvents, myCGEventCallback, NULL);

if (!eventTap) {
    NSLog(@"Couldn't create event tap!");
    exit(1);
}

runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);

CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);

CGEventTapEnable(eventTap, true);

CFRunLoopRun();

CFRelease(eventTap);
CFRelease(runLoopSource);

exit(0);

}

그리고 실제 이벤트 콜백은 다음과 같습니다.

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
    if (type == kCGEventKeyUp) {
        CGKeyCode keycode = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode);
        NSLog(@"%d", keycode);
    }

    return event;
}

콘솔에 로그인 한 내용은 기능 키에 대한 일반 로그 메소드 ( "FN"키를 유지하는 경우)를 얻을 수 있지만 미디어 키, 밝기, 볼륨 또는 방출 키를 누를 때는 아무것도 아님 기록되고 있습니다.

따라서 불행히도 미디어 키 이벤트를 캡처 할 방법이없는 것으로 보입니다. 그러나 나는 틀린 것으로 판명되고 싶습니다.

편집 :이 작업이 작동하려면 루트로 실행해야하거나 시스템 환경 설정의 "범용 액세스"창에서 보조 장치에 대한 액세스를 켜야한다는 것을 잊었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top