机器人的 keyPress() 不能正常工作

Robot's keyPress() doesn't work as should

我在 Java Robot class 方面需要帮助。我有以下代码:

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”然后立即松开。因此,Robot class 不会在一段时间后按下并释放,而是触发一次按键。

如何让我的 Java 应用程序按住一个键几秒钟,然后松开?

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

类似问题 (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);

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