Ответ 1
Как только вы обнаружите ключи, вы можете отправить клавишу паузы, чтобы песня, которую воспроизводит itunes, приостановлена, вы можете использовать переменную boolean
для обнаружения между ярлыками, набираемыми на клавиатуре, или отправкой программа (в случае необходимости)
или
Вы можете использовать некоторый c-код (запустите программу c вместе с вашей java-программой), посмотрите на @Dave Delongs ответ здесь Измените NSEvent на отправку другого ключа, кроме одного который был нажат У вас может быть другая комбинация клавиш и изменение программы c для отправки ваших сочетаний клавиш, когда нажаты клавиши быстрого доступа Itunes, если вам нужны коды клавиш Где я могу найти список виртуальных виртуальных машин Mac коды клавиш?
например, если ваша музыкальная программа использует 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);
}