如果您的键盘上有播放/暂停/等按钮(音乐控制快捷键),按下它们,iTunes将会打开(至少在Mac上)。
如果你最近打开了另一个音乐播放器,比如Spotify,它实际上会拦截快捷键,iTunes也不会做任何事情。
好吧,我想制作一个带有Java的音乐播放器,我希望有相同的行为。我希望我的应用程序拦截这样的快捷方式,其他程序不应该能够干预。
我正在使用JavaFX,虽然我认为这不重要。
我怎样才能做到这一点?
我已经能够使用JNativeHook检测用户按下的键,但我不知道如何拦截键,以便其他应用程序不会使用它们。
答案 0 :(得分:4)
检测到密钥后,您可以发送暂停键以暂停iTunes播放的歌曲,您可以使用boolean
变量来检测键盘上输入的快捷键或是由程序发送(如果您需要)
或
你可以使用一些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 to play songs
和r to listen to the next song
,而iTunes使用spacebar
播放歌曲,right arrow key
转到下一个,您可以修改@Dave Delongs在这里回答的是: -
#import <Cocoa/Cocoa.h>
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
//0x31 is the virtual keycode for "Spacebar"
//0x23 is the virtual keycode for "p"
if (CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode) == 0x31) {
CGEventSetIntegerValueField(event, kCGKeyboardEventKeycode, 0x23);
}
//0x7C is the virtual keycode for "Right arrow"
//0x0F is the virtual keycode for "R"
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);
}
答案 1 :(得分:1)
您可以使用iTunesPatch中的一些代码来完成您正在寻找的内容,但似乎系统守护程序可能需要在安装时进行修改,您可能不得不使用目标C /夫特
博客文章here中有关于iTunesPatch的更多详细信息。