2012-03-26 50 views
4

我想模擬Java中的按鍵。其他人已經嘗試過使用機器人。這隻允許一個原子按鍵,我想模擬一個按鍵(一秒鐘),然後釋放。所以,我需要使用JNA或JNI。使用JNA或JNI來模擬Windows中按下的按鍵

我調查了JNative,但這似乎是在操作系統級別上消費關鍵事件,而不是在操作系統級別生成它們。我怎樣才能從Java生成這樣的事件?

感謝

回答

2

根據JavaDoc:

void java.awt.Robot.keyPress(int keycode) 

Presses a given key. The key should be released using the keyRelease method. 

編輯:添加一個樣本:

aA 

(我知道這一點:

Robot robot = new Robot(); 
    System.out.println("You have 2 seconds to jump to the target window..."); 
    Thread.sleep(2000); 
    robot.keyPress(KeyEvent.VK_A); 
    robot.keyRelease(KeyEvent.VK_A); 
    robot.keyPress(KeyEvent.VK_SHIFT); 
    robot.keyPress(KeyEvent.VK_A); 
    robot.keyRelease(KeyEvent.VK_SHIFT); 
    robot.keyRelease(KeyEvent.VK_A); 
    Thread.sleep(2000); 

輸出繼電器的目標窗口不是你想要的,而是我添加它爲未來的讀者作爲參考,所以他們不認爲在JavaDoc或機器人有一個錯誤)

2

其實,使用機器人,你可以按住第二鍵。

Robot r = ... 
r.keyPress(KeyEvent.VK_A); 
Thread.sleep(1000); 
r.keyRelease(KeyEvent.VK_A); 
+0

謝謝,但這是行不通的。看到這個其他職位:http://stackoverflow.com/questions/784414/simulate-a-key-held-down-in-java因爲做keypress,然後等待,然後keyRelease,不像你所期望的那樣工作。另一個答案建議使用另一個線程進行定時,同時發出重複的Robot.keyPress()調用,但這並不會執行「按住」操作,它只是執行大量單鍵按壓。我正在嘗試與需要低級別事件的程序進行接口 - 機器人根本不工作。因此,爲什麼我需要以某種方式連接到Windows API。謝謝 – user1292066 2012-03-26 03:56:46