Frage

Ich bin ziemlich neu in OSX Entwicklung, so dass dies einfach sein, aber Google hat nicht geholfen.

Ich versuche, eine Aktion auf die Media-Tasten zu binden Sie auf neueren Apple-Tastaturen (Play, Pause, usw.) finden. Es scheint, dass Sie nicht auf diese Tasten mit der regulären Hotkey API binden können, aber es muss möglich sein, da iTunes eindeutig verwaltet. Gibt es eine heikle undokumentierte API, die dies erreicht? Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Nach umfangreichen googeln, diese http://www.rogueamoeba.com/ utm / 2007/09/29 / scheint das Problem zu beheben. Es gibt keine einfache Lösung, aber wenn Sie eine echte Cocoa-Anwendung zu entwickeln scheint möglich, zumindest.

Andere Tipps

Aus meinen Untersuchungen, das Betriebssystem diese Schlüsselereignisse Trapping, bevor sie auf andere Prozesse zur Verfügung stehen. Ich habe eine CGEventTap, etwa so:

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);

}

Und dann der eigentliche Ereignis Rückruf ist dies:

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

    return event;
}

Was sehen Sie an der Konsole angemeldet ist, dass Sie normale Protokoll Methoden für die Funktionstasten (wenn Sie die „Fn“ -Taste und der Hand halten, unten), aber wenn die Medientasten drücken, Helligkeit, Lautstärke oder auswerfen Tasten nichts wird protokolliert zu werden.

von diesem So scheint es leider, dass es keine Möglichkeit gibt, ein Medienschlüsselereignis zu erfassen. Allerdings würde ich lieben falsch erwiesen hat.

EDIT:. Ich habe vergessen, darauf hinweisen, dass für diese Option funktioniert entweder als root ausgeführt werden muss, oder Sie auf Zugriff für Hilfsgeräte in der „Universal Access“ Fensterbereich der Systemeinstellungen aktivieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top