如何在窗口的任何位置找到关键监听器

时间:2014-04-09 07:34:33

标签: java windows swing listener adapter

我开发了一个监控用户工作的java桌面应用程序。现在我想计算系统中任何地方的按键次数和鼠标点击次数。

这意味着当我的应用程序运行并且用户在浏览器中输入内容或打开任何文件夹时,鼠标单击并按键计数会增加。

我可以使用下面的代码

 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher()

如果是,那怎么可能?如果我不能使用它那么请快速告诉我如何可能。我是java的初学者

2 个答案:

答案 0 :(得分:5)

我认为这个例子对你有充分的帮助,这就是钩子系统调用Global Keyboard Listener的例子

    import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class GlobalKeyListenerExample implements NativeKeyListener {
        public void nativeKeyPressed(NativeKeyEvent e) {
                System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

                if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
                        GlobalScreen.unregisterNativeHook();
                }
        }

        public void nativeKeyReleased(NativeKeyEvent e) {
                System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
        }

        public void nativeKeyTyped(NativeKeyEvent e) {
                System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
        }

        public static void main(String[] args) {
                try {
                        GlobalScreen.registerNativeHook();
                }
                catch (NativeHookException ex) {
                        System.err.println("There was a problem registering the native hook.");
                        System.err.println(ex.getMessage());

                        System.exit(1);
                }

                //Construct the example object and initialze native hook.
                GlobalScreen.getInstance().addNativeKeyListener(new GlobalKeyListenerExample());
        }
}

答案 1 :(得分:2)

我知道可以使用Windows HOOKS system calls来实现,可以从C或C ++(Tutorial)轻松访问。

对于Java,您需要包装这些系统调用。 有一个库已经让你的工作,但我从来没有测试过它:

https://code.google.com/p/jnativehook/