Robot的keyPress()不能正常工作

时间:2015-03-08 16:13:07

标签: java sendkeys awtrobot

我需要Java中的Robot类帮助。我有以下代码:

public static void main(String[] args) throws AWTException {
    Robot r = new Robot();
    r.delay(3000);
    r.keyPress(KeyEvent.VK_7);
    r.delay(5000);
    r.keyRelease(KeyEvent.VK_7);
}

据我了解,此代码必须按" 7"并在5秒后释放。但它按了" 7"现在发布它。因此,机器人不会按下并发布,它会点击"钥匙。我做错了什么?

1 个答案:

答案 0 :(得分:0)

因此,在仔细研究该主题后,我得出的结论是 java.awt.Robot 类没有“按住”键的功能。

类似问题 (Simulate a key held down in Java) 的答案建议我创建一个不断重复 keyPress 事件的循环,但我并不满意,因为我需要一个真正的按键模拟。

我也尝试使用 this library 但没有成功:

Thread.sleep(3000);
Keyboard.sendKeyDown(KeyEvent.VK_7);
Thread.sleep(5000);
Keyboard.sendKeyUp(KeyEvent.VK_7);

最后,我通过 winKeyboard 解决了我的问题。但这里有一个重要说明

我正在为游戏开发一个机器人,并没有试图在任何文本编辑器中按住一个键,看看它如何不断地用字符填充行。如果您尝试在文本编辑器中测试按住按钮,它将不起作用,因为文本编辑器重复按键的工作方式与游戏中的普通键盘事件侦听器不同。但这是一个不同的话题。

解决方案:

Keyboard keyboard = new Keyboard();

Thread.sleep(3000);
keyboard.winKeyPress(ScanCode.DIK_7);
Thread.sleep(5000);
keyboard.winKeyRelease(ScanCode.DIK_7);

另一件需要注意的是,有时候,为了让机器人在游戏中工作,你需要以管理员身份运行你的应用程序,否则它可能无法工作。