【问题标题】:Can Java see activity of my keyboard?Java 可以看到我的键盘活动吗?
【发布时间】:2011-01-11 06:09:05
【问题描述】:

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

首先我想知道是否可以使用 Java 来实现。我知道如果我输入由 Java 程序生成的文本字段是可能的。但是,如果我在浏览器的文本字段或例如在 word(或 open office)文档中键入,Java 是否可以监视键盘活动?

【问题讨论】:

    标签: java keylistener


    【解决方案1】:

    使用一些本地库编写基于 Java 的按键记录器是可能的,但请注意,这样的程序可能比使用不同技术的程序更引人注目,因为需要运行 Java VM 才能使其工作.如果你想偷偷摸摸,请记住这一点。

    另外,如果您只需要使用这样的程序,而没有自己开发它,那么已经有许多硬件和软件键盘记录系统可供您使用。

    【讨论】:

      【解决方案2】:

      我认为本机函数可以做到这一点。 就像您可以将 c++ 与 Java 连接起来一样。

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

      【讨论】:

        【解决方案3】:

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

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

        要在系统范围内捕获(您需要的词),您需要包含本机库

        windows 代码示例:Native keyboard mouse hook

        【讨论】:

        • 也许在 while 循环中添加一点延迟 :-)
        【解决方案4】:

        使用 Java API 无法实现您的请求。为了进行系统范围的密钥记录,您需要使用 win32(或其他操作系统原生)挂钩进行注册。具体来说,这将使用本机库并与 JNI 接口来完成。

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

        【讨论】:

          【解决方案5】:

          忘记 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,我不能在我的回复中发布多个工作链接 :(

          干杯

          【讨论】:

            【解决方案6】:

            忘记 JNI 和 JNA。

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-12-25
              • 2013-11-17
              • 1970-01-01
              • 1970-01-01
              • 2010-10-02
              • 2020-09-05
              • 2017-09-19
              • 2011-04-28
              相关资源
              最近更新 更多