我是相当新的OSX的发展,所以这可能是容易的,但谷歌已经没有帮助。

我想绑定到媒体键您在新的Apple键盘(播放,暂停等)找到一个动作。看来,你不能使用常规的热键API绑定到这些按键,但由于iTunes的明确管理它必须是可行的。有没有达到这个棘手的一些未公开的API?任何帮助,将不胜感激。

有帮助吗?

解决方案

更广泛的googling后,此 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”键也一样),但按媒体键时,亮度,音量,或退出键,<强>没有是越来越记录。

因此,从这种情况,不幸的是似乎有没有办法捕捉的媒体键事件。不过,我很乐意被证明是错误的。

编辑:我忘了指出,对于这项工作,要么需要以root身份运行,或者您需要打开系统偏好设置的“普遍可及”窗格中的辅助设备的访问

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top