gpt4 book ai didi

java - 如何拦截Java中的音乐控制键盘快捷键?

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:43 25 4
gpt4 key购买 nike

如果您的键盘上有播放/暂停/等按钮(音乐控制快捷方式),当您按下这些按钮时,iTunes 将打开(至少在 Mac 上是这样)。

如果你最近打开了另一个音乐播放器,比如 Spotify,它实际上会拦截快捷键,而 iTunes 不会做任何事情。

好吧,我想用 Java 制作一个音乐播放器,并且我想要有相同的行为。我希望我的应用程序拦截此类快捷方式,而其他程序应该无法干扰。

我正在使用 JavaFX,尽管我认为这并不重要。

我怎样才能做到这一点?

我已经能够检测到用户使用 JNativeHook 按下的键,但我不知道如何拦截 key ,以便其他应用程序不会对它们执行任何操作。

最佳答案

一旦检测到按键,就可以发送暂停键,这样 itunes 正在播放的歌曲就会暂停,您可以使用 boolean 变量来检测正在键入的快捷键之间键盘或由程序发送(以防万一)

您可以使用一些 c 代码(启动 c 程序和您的 java 程序)看看@Dave Delongs 在这里的回答 Modify NSEvent to send a different key than the one that was pressed如果您需要键码 Where can I find a list of Mac virtual key codes?,您可以使用不同的键盘快捷键并修改 c 程序以在按下 Itunes 快捷键时发送您的快捷键。

例如,如果您的音乐程序使用p 播放歌曲,使用r 播放下一首歌曲,而 iTunes 使用空格键 播放歌曲和右箭头键去下一首,你可以做修改@Dave Delongs answer here are the changes :-

#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);
}

关于java - 如何拦截Java中的音乐控制键盘快捷键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com