[英]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。
現在有一個用於本機鼠標和鍵盤訪問的新庫,它與MouseXxxListener
和KeyListener
完全相同。 換句話說,它是一個熟悉的界面,因此您不必學習任何新東西(除了您如何鏈接外部庫)。
忘記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 ++。
您使用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.