一旦检测到按键,您可以发送暂停键以暂停由iTunes播放的歌曲,您可以使用一个布尔变量来区分键盘上键入的快捷键和程序发送的快捷键(如果需要的话)。
或者
您可以使用一些C代码(在Java程序中启动C程序),请参阅@Dave Delongs的答案
Modify NSEvent to send a different key than the one that was pressed。您可以设置不同的键盘快捷键,并修改C程序,以便在按下iTunes快捷键时发送您的快捷键,如果需要键码,请参见
Where can I find a list of Mac virtual key codes?
例如,如果您的音乐程序使用
p播放歌曲
和
r听下一首歌曲
,而iTunes使用
空格键
播放歌曲和
右箭头键
转到下一首歌曲,则可以修改@Dave Delongs的答案,以下是更改内容:
#import <Cocoa/Cocoa.h>
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 0x31) {
CGEventSetIntegerValueField(event, kCGKeyboardEventKeycode, 0x23);
}
if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 0x7C) {
CGEventSetIntegerValueField(event, kCGKeyboardEventKeycode, 0x0F);
}
return event;
}
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CFRunLoopSourceRef runLoopSource;
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, 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);
[pool release];
exit(0);
}