【问题标题】:Java Robot - Issue typing 'a' on macJava Robot - 在 Mac 上键入“a”的问题
【发布时间】:2017-03-13 21:01:39
【问题描述】:

所以我有以下代码:

public static void main(String[] args) throws AWTException, InterruptedException {
    Robot robot = new Robot();

    robot.setAutoWaitForIdle(true);
    robot.setAutoDelay(40);

    // This works fine
    robot.mouseMove(40, 130);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.delay(200);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    robot.delay(200);

    // The 'a' is never inputted
    robot.keyPress(KeyEvent.VK_A);
    robot.delay(200);
    robot.keyRelease(KeyEvent.VK_A);
}

此代码成功将鼠标移动到位置 40、130 并单击。我确保在此位置打开一个文本编辑器,以便它变得专注。

下一段代码是问题所在。 keyPress/Release sn-p 适用于其他代码。 (如 100,对应数字 4。)但由于某种原因,字母“a”不会打印到文本编辑器中。

我尝试让程序不断循环并打印 a 约 5 秒。程序化单击后,它不会在文本编辑器中打印“a”。如果我在这段时间自己再次点击编辑器,'a's 的字符串就会开始出现。

是什么导致了这种行为,我该如何解决?

【问题讨论】:

  • 如果您使用不同的VK_? 键事件(即VK_B)运行完全相同的代码,它是否有效?此外,由于 ASCII 码 100 是小写的 d,而不是数字 4,因此似乎有些混乱。
  • 是的,与 VK_4 完全相同的代码可以正常工作。似乎 VK_B 也不起作用。
  • 如果交替发送VK_4VK_A,以VK_4 开头,会怎样?你得到没有As 的4s 吗?如果你以VK_A 开头呢?请花点时间尝试一下。
  • 我已经搞砸了很长一段时间,我遇到的所有行为似乎都没有意义。首先,VK_4 后跟 VK_A 只打印 4。我尝试将 65 到 100 作为 keyPress/release 值循环,最后得到oty]0123 的输出,显然缺少许多值。我还尝试增加和减少发布之间的延迟而不改变输出。我还尝试了在 InputEvent 中单击其他鼠标 1 并得到相同的结果。双击也一样
  • 提供一个明确的列表,列出有效和无效的字符。

标签: java macos awtrobot


【解决方案1】:

正如我在我的 cmets 中假设的那样,我认为您在正确聚焦编辑器时遇到了问题。 您可以尝试通过ALT+TAB 使用Windows 解决方案,然后释放它以选择编辑器。

Robot robot = new Robot();

robot.setAutoWaitForIdle(true);
robot.setAutoDelay(40);

robot.keyPress(KeyEvent.VK_ALT);//on mac use VK_META
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_ALT);//on mac use VK_META
robot.keyRelease(KeyEvent.VK_TAB);

robot.keyPress(KeyEvent.VK_A);
robot.delay(200);
robot.keyRelease(KeyEvent.VK_A);

【讨论】:

  • 这似乎是问题所在。对于 Mac alt+tab,我必须将 VK_ALT 更改为 VK_META。不知道为什么BUTTON1_MASKBUTTON1_DOWN_MASK 选择不正确的窗口。我相信这个问题可能与它在 intellij run 区域中运行的事实有关。不过不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2013-06-30
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2020-05-25
相关资源
最近更新 更多