【问题标题】:Robot's keyPress() doesn't work as should机器人的 keyPress() 不能正常工作
【发布时间】:2015-03-08 16:13:06
【问题描述】:

我需要有关 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”然后立即释放它。因此,Robot 类不会在一段时间后按下并释放,而是会触发一次按键。

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

【问题讨论】:

  • 您的问题到底是什么?你只按一次是什么意思,因为你只调用一次 keyPress
  • 对于不正确的问题,我深表歉意。我已经更正了。所以我的意思是机器人不会将钥匙保持在“向下位置”。在没有keyRelease()命令的情况下按下并释放
  • 有没有可能是你的键盘?我的意思是,如果您手动按住7 键几秒钟然后立即释放它,您会得到不同的结果吗?
  • 据我所知,您想按住键 x 时间,也许此链接会有所帮助:stackoverflow.com/questions/784414/…

标签: java sendkeys awtrobot


【解决方案1】:

因此,在仔细研究了这个主题之后,我得出结论,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);

另外需要注意的是,有时,要让机器人在游戏中运行,您需要以管理员身份运行您的应用程序,否则它可能无法运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2016-01-09
    • 2018-03-07
    • 1970-01-01
    • 2020-10-29
    • 2019-11-23
    相关资源
    最近更新 更多