如何编写一个关键监听器来跟踪Java中的所有击键?

Arg*_*rty 16 java keylistener keylogger

我想用Java编写一个关键的监听器.无论Java应用程序是否具有焦点,它都应跟踪所有按键操作.这可能吗?

Sim*_*iil 15

我刚才用过类似的东西.看看Java System Hook.

它通过JNI跟踪全局按键(不仅仅是您的Java应用程序).它对我来说非常快速而且完美


KeyListener作为守护程序线程启动,它不会使应用程序保持活动状态.您必须在程序中有另一个正在运行的非守护程序线程

例如:

GlobalKeyListener globalKeyListener = new GlobalKeyListener();
globalKeyListener.addKeyListener(listener);
while (true) {
    Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)


Sit*_*ers 12

这是可能的,但需要利用JNI的实现,而JNI并不总是可移植的.

Java System Hook是一个可以与Windows 32和64位一起使用的库.

  • 请在 [GitHub](https://github.com/kristian/system-hook) 上找到最新版本和示例。以及 [我的博客文章](http://kra.lc/blog/2016/02/java-global-system-hook/) 上对该库的描述。正如尤达在下面的问题中所说,库作为守护线程运行,因此您必须在主线程中等待。 (2认同)

ᴇʟᴇ*_*ᴀтᴇ 5

不,Java 无法访问其活动窗口之外的击键。

为此,您必须结合使用 Java 和本机代码,使用 JNI 调用本机代码。在 Microsoft Windows 中,您应该查看GetAsyncKeyState(key).