Java可以看到键盘的活动吗?

时间:2010-01-30 18:42:03

标签: java keylistener

我想编写一个可以监控键盘活动的程序。更详细地说,Java程序应该“看到”按下/释放哪个键以及何时按下。所有这些信息都应存储在给定的文件中。

首先,我想知道是否可以使用Java来实现它。我知道如果我输入Java程序生成的文本字段,就有可能。但是,如果我在浏览器的文本字段中键入(例如,在单词(或开放式办公室)文档中),Java是否可以监视键盘活动?

6 个答案:

答案 0 :(得分:4)

这些事件被定向到具有焦点的窗口,从桌面上的所有事件中你只能获得鼠标位置。

import java.awt.MouseInfo;


    public class Mouse {
        public static void main(String[] args) {
            while ( true ) {
                System.out.println( MouseInfo.getPointerInfo().getLocation() );
            }
        }
    }

为了捕获sysem wide(你需要的单词),你需要包含一个原生的lib

Windows的代码示例:Native keyboard mouse hook

答案 1 :(得分:3)

忘记JNI和JNA。

现在有一个用于本机鼠标和键盘访问的新库,其工作方式与MouseXxxListenerKeyListener完全相同。换句话说,它是一个熟悉的界面,因此您不必学习任何新内容(除了您如何链接外部库)。

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

答案 2 :(得分:2)

忘记JNI

JNA是解决方案(基于JNI,但它更容易,虽然大多数人不使用它认为它像JNI一样困难,但事实并非如此)

检查https://github.com/twall/jna/ 特别是在页面中间的位置:平台/平台文档

如果您下载platform.jar(并检查源代码),您将找到一个包装器 User32.dll,你可以在其中找到win32函数 GetAsyncKeyState(int vKey)

映射到相应的java函数

(见h ** ps://jna.dev.java.net/javadoc/platform/com/sun/jna/platform/win32/User32.html)

你可以检查一个键的状态(按下或释放)

如果您需要全局密钥监听器,请查看我的其他回复:

h**p://stackoverflow.com/questions/696170/java-keylistener-without-window-being-open/4394398

感谢Stackoverflow,我无法在回复中发布多个工作链接:(

干杯

答案 3 :(得分:1)

可能使用一些本机库编写基于Java的密钥记录器,但要注意这样的程序可能比使用不同技术的程序更明显,因为Java VM需要运行才能使其工作。如果你想成为秘密的话,请记住这一点。

另外,如果您只需要使用这样的程序,并且 自己开发它,那么您可以使用许多硬件和软件键盘记录系统。< / p>

答案 4 :(得分:0)

我认为原生功能可以做到。 这就像你可以用c ++连接c ++。

http://en.wikipedia.org/wiki/Java_Native_Interface

答案 5 :(得分:0)

使用Java API无法提出请求。要进行系统范围的密钥记录,您需要使用win32(或其他OS本机)挂钩进行注册。具体来说,这将使用本机库并与JNI连接。

http://forums.sun.com/thread.jspa?messageID=3808163#3808163处有一些代码段。这是如何开始使用JNI并将Java回调注册到win32钩子的一个很好的例子。