我在Java中做了一个简单的媒体播放器,但我想记录全球按键像按Ctrl + P暂停/恢复当前正在播放的音乐没有的JFrame有焦点但它似乎不可能由于JVM安全问题。如何捕获全球按键在java中
我遇到了JNativeHook但我想实现我自己的方法只适用于Windows。 请建议如何做,从哪里开始?
我在Java中做了一个简单的媒体播放器,但我想记录全球按键像按Ctrl + P暂停/恢复当前正在播放的音乐没有的JFrame有焦点但它似乎不可能由于JVM安全问题。如何捕获全球按键在java中
我遇到了JNativeHook但我想实现我自己的方法只适用于Windows。 请建议如何做,从哪里开始?
Jintellitype是一个简单的解决方案。
https://code.google.com/p/jintellitype/
其他简单的解决方法是使用Windows钩子与JNA:
我有JNA一些经验,并真正喜欢的API。
第三种解决方案是使用JNI管理自己的呼叫。
就我所知,可移植性方面,只要响应用户输入,windows dll和api体系结构已保存在不同的操作系统版本中。如果内存服务,用户输入的钩子在user32 dll中。也许你不得不跳过一些x64位版本的圈套,但我怀疑这会很难。
尝试JNativeHook。下面是展示如何使用它来捕捉全球按键的例子:如果你使用maven
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();
}
,添加到您的pom.xml
:
<dependency>
<groupId>com.1stleg</groupId>
<artifactId>jnativehook</artifactId>
<version>2.1.0</version>
</dependency>
哇。这似乎很有希望。谢谢。 – Snehasish 2017-05-20 10:45:26
实现自己的方法在Windows中,你会需要使用JNI或JNA。这是可行的,但如果您不熟悉Windows API和C编码,则会涉及到一些学习曲线。 – 2013-04-23 22:02:10
我熟悉C编码,但不熟悉Windows API。请建议我从哪里开始或搜索什么,因为我非常渴望为我的项目实施它。 – Snehasish 2013-04-23 22:12:51
对于Windows API,谷歌MSDN库,因为它都可以在那里找到。至于JNI,你会希望谷歌的教程。 JNA更易于使用,但需要下载JNA库。 – 2013-04-23 22:23:06