簡體   English   中英

將鍵盤事件從java發送到任何應用程序(屏幕鍵盤)

[英]Sending a keyboard event from java to any application (on-screen-keyboard)

我正在開發一個帶有java的屏幕鍵盤。 該鍵盤具有每個可能鍵的JComponent 當在按鈕上檢測到鼠標按下時,我想將特定鍵盤代碼發送到當前焦點上的應用程序。 鍵盤本身位於一個沒有裝飾的JFrame ,並設置為始終在頂部。

我發現Robot類可以用來模擬本機隊列上的這些鍵盤事件。 但是,在這種情況下,選擇JComponent意味着在JFrame上收到按鍵,我將無法在其他應用程序中接收它

如何保持我的屏幕鍵盤“始終無焦點”? 是否可以使用另一種方法發送按鍵?

當我試圖用實際的鍵盤和鼠標命令控制一個游戲機器人時(我更像“人類”),我找到了jnativehook

到目前為止我唯一能找到的解決方案是將每個鍵都設為JComponent(因此它不能有焦點),並在JFrame上設置以下屬性:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

現在,當使用機器人類時,我可以通過單擊鍵將事件發送到任何聚焦窗口。 唯一的限制是,它似乎只適用於屬於同一個虛擬機的Windows,並且它根本不適用於任何其他系統窗口。

顯然,唯一的方法是使用一個JNI層來進行從java到native的轉換。 Java沒有簡單的方法來提供這樣的功能。

對於想要學習JNI的人來說,對於一個小型的第三方圖書館來說,這可能是一個有趣的概念......

您是否嘗試在使用機器人類之前調用​​本機setfocus()或setactivewindow()函數來移動焦點?

我不知道以獨立於操作系統的方式執行此操作的任何方法。 我不知道Windows,但可以通過X協議與X服務器通話。

暫無
暫無

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

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