2012-03-26 51 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