我想编写一个可以监控键盘活动的程序。更详细地说,Java程序应该“看到”按下/释放哪个键以及何时按下。所有这些信息都应存储在给定的文件中。
首先,我想知道是否可以使用Java来实现它。我知道如果我输入Java程序生成的文本字段,就有可能。但是,如果我在浏览器的文本字段中键入(例如,在单词(或开放式办公室)文档中),Java是否可以监视键盘活动?
答案 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。
现在有一个用于本机鼠标和键盘访问的新库,其工作方式与MouseXxxListener
和KeyListener
完全相同。换句话说,它是一个熟悉的界面,因此您不必学习任何新内容(除了您如何链接外部库)。
答案 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 ++。
答案 5 :(得分:0)
使用Java API无法提出请求。要进行系统范围的密钥记录,您需要使用win32(或其他OS本机)挂钩进行注册。具体来说,这将使用本机库并与JNI连接。
http://forums.sun.com/thread.jspa?messageID=3808163#3808163处有一些代码段。这是如何开始使用JNI并将Java回调注册到win32钩子的一个很好的例子。