如何在java中捕获全局按键
我用Java制作了一个简单的媒体播放器,但我想录制全局按键,如Ctrl+p,以暂停/恢复当前播放的音乐,而JFrame没有焦点,但由于JVM安全问题,这似乎是不可能的 我遇到过这样的问题,但我只想为Windows实现我自己的方法。如何在java中捕获全局按键,java,Java,我用Java制作了一个简单的媒体播放器,但我想录制全局按键,如Ctrl+p,以暂停/恢复当前播放的音乐,而JFrame没有焦点,但由于JVM安全问题,这似乎是不可能的 我遇到过这样的问题,但我只想为Windows实现我自己的方法。 请建议如何操作以及从何处开始?Jintellitype是一个比较简单的解决方案 另一个简单的解决方案是将windows钩子与JNA结合使用: 我对JNA有一些经验,并且非常喜欢这个api 第三种解决方案是使用JNI管理您自己的呼叫 就可移植性而言,据我所知,win
请建议如何操作以及从何处开始?Jintellitype是一个比较简单的解决方案 另一个简单的解决方案是将windows钩子与JNA结合使用: 我对JNA有一些经验,并且非常喜欢这个api 第三种解决方案是使用JNI管理您自己的呼叫 就可移植性而言,据我所知,windows DLL和api体系结构在响应用户输入方面已在不同的操作系统版本中得到保留。如果内存可用,则用户输入的挂钩位于user32 dll中。对于x64位的版本,您可能需要经历一些困难,但我怀疑这会有那么难。试试。下面是一个示例,演示如何使用它捕获全局按键:
try
{
GlobalScreen.registerNativeHook();
GlobalScreen.addNativeKeyListener(new NativeKeyListener()
{
@Override
public void nativeKeyTyped(NativeKeyEvent nativeEvent)
{
}
@Override
public void nativeKeyReleased(NativeKeyEvent nativeEvent)
{
String keyText=NativeKeyEvent.getKeyText(nativeEvent.getKeyCode());
System.out.println("User typed: "+keyText);
}
@Override
public void nativeKeyPressed(NativeKeyEvent nativeEvent)
{
}
});
}
catch (NativeHookException e)
{
e.printStackTrace();
}
如果您使用的是maven,请将其添加到pom.xml
:
<dependency>
<groupId>com.1stleg</groupId>
<artifactId>jnativehook</artifactId>
<version>2.1.0</version>
</dependency>
com.1stleg
jnativehook
2.1.0
要在windows中实现自己的方法,您需要使用JNI或JNA。这是可以做到的,但是如果你不熟悉Windows API和C编码,就会有一些学习过程。我熟悉C编码,但不熟悉Windows API。请建议我从哪里开始或搜索什么,因为我非常渴望在我的项目中实现它。对于Windows API,谷歌MSDN库,因为所有这些都可以在那里找到。至于JNI,你会想在谷歌上搜索教程。JNA更易于使用,但需要下载JNA库。因此我必须分别为32位和64位体系结构编写代码?可能不会,但也有可能。我希望User32DLL在x86和x64体系结构上都存在。不过,我至少会在64位操作系统上运行它,看看它是否有效。希望是这样。