簡體   English   中英

Java可以看到鍵盤的活動嗎?

[英]Can Java see activity of my keyboard?

我想編寫一個可以監控鍵盤活動的程序。 更詳細地說,Java程序應該“看到”按下/釋放哪個鍵以及何時按下。 所有這些信息都應存儲在給定的文件中。

首先,我想知道是否可以使用Java。 我知道如果我輸入Java程序生成的文本字段,就有可能。 但是,如果我在瀏覽器的文本字段中鍵入(例如,在單詞(或開放式辦公室)文檔中),Java是否可以監視鍵盤活動?

這些事件被定向到具有焦點的窗口,從桌面上的所有事件中您只能獲得鼠標位置。

import java.awt.MouseInfo;


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

為了捕獲sysem wide(你需要的單詞),你需要包含一個本機庫

Windows的代碼示例:本機鍵盤鼠標掛鈎

忘記JNI和JNA。

現在有一個用於本機鼠標和鍵盤訪問的新庫,它與MouseXxxListenerKeyListener完全相同。 換句話說,它是一個熟悉的界面,因此您不必學習任何新東西(除了您如何鏈接外部庫)。

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

忘記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我無法在我的回復中發布多個工作鏈接:(

干杯

可能使用一些本機庫編寫基於Java的密鑰記錄器,但要注意這樣的程序可能比具有不同技術的程序更明顯,因為Java VM需要運行才能使其工作。 如果你想成為秘密,請記住這一點。

另外,如果你只需要這樣的程序使用,而不必自行開發它,還有很多硬件和軟件鍵盤記錄系統已經在那里,你可以改用。

我認為本機功能可以做到這一點。 這就像你可以用c ++連接c ++。

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

您使用Java API無法請求的內容。 要進行系統范圍的密鑰記錄,您需要使用win32(或其他OS本機)掛鈎進行注冊。 具體來說,這將使用本機庫並與JNI連接來完成。

http://forums.sun.com/thread.jspa?messageID=3808163#3808163上有一些代碼段。 這是如何開始使用JNI並將Java回調注冊到win32鈎子的一個很好的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM