我用Java创建了一个简单的媒体播放器,但我想要记录全局按键,如 Ctrl + P 来暂停/恢复当前正在播放音乐没有JFrame有焦点但似乎由于JVM安全问题而无法实现。
我遇到了JNativeHook但我只想为Windows实现自己的方法。 请建议如何操作以及从哪里开始?
答案 0 :(得分:5)
尝试 JNativeHook 。以下是一个示例,说明如何使用它来捕获全局按键:
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>
答案 1 :(得分:4)
Jintellitype是一个有点简单的解决方案。
https://code.google.com/p/jintellitype/
另一个简单的解决方案是使用JNA的Windows钩子:
我有一些JNA的经验,并且非常喜欢api。
第三种解决方案是使用JNI管理您自己的呼叫。
可移植性据我所知,就响应用户输入而言,windows dlls和api架构已在不同的OS版本中保留。如果内存服务,用户输入的钩子在user32 dll中。也许你必须跳过一些x64位版本的箍,但我怀疑它会那么难。