我正在尝试使用浏览器applet中的JNativeHook来获取某个键盘事件。我得到一些奇怪的行为,它似乎没有工作。这是我到目前为止的代码:
import java.awt.*;
import java.applet.Applet;
import netscape.javascript.*;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class Test extends Applet implements NativeKeyListener {
JSObject window;
public void nativeKeyPressed(NativeKeyEvent e) {
window.eval("console.log('"+NativeKeyEvent.getKeyText(e.getKeyCode()) + "');");
}
public void nativeKeyReleased(NativeKeyEvent e) {
}
public void nativeKeyTyped(NativeKeyEvent e) {
}
public void init() {
window = JSObject.getWindow(this);
window.eval("console.log('test');");
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
window.eval("console.log('There was a problem registering the native hook.');");
window.eval("console.log('"+ex.getMessage()+"');");
System.exit(1);
}
//Construct the example object and initialze native hook.
GlobalScreen.getInstance().addNativeKeyListener(this);
}
}
理想情况下,我希望能够在全局按下某个键后回调到javascript函数。我已经阅读了一些关于权限和签名的内容,但我不确定这是否导致localhost测试问题(我必须点击警告)。
我对JNativeHook的内部运作也不是100%。我很想用JNI为每个平台编写一个小DLL,但是我想检查一下我是否遗漏了一些基本的东西。
答案 0 :(得分:0)
可以从JNLP运行本机代码(JNativeHook),但您需要使用有效证书对代码进行签名。如果你想进行一些测试,你可以从没有一个的localhost运行。