OSX 10.5下结合于Apple键盘媒体键[关闭]
题
我是相当新的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身份运行,或者您需要打开系统偏好设置的“普遍可及”窗格中的辅助设备的访问
不隶属于 StackOverflow