Java机器人-问题类型';a';在mac上
因此,我有以下代码:Java机器人-问题类型';a';在mac上,java,macos,awtrobot,Java,Macos,Awtrobot,因此,我有以下代码: 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); ro
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代码段对于其他代码非常有效。(如100,对应于数字4。)但由于某种原因,字母“a”不会打印到文本编辑器中
我已经试着让程序连续循环并打印一个约5秒钟。程序单击后,它将不会在文本编辑器中打印“a”。如果在此期间我自己再次单击编辑器,则“a”字符串将开始出现
是什么导致了这种行为?我如何修复它?正如我在评论中所假设的那样,我认为您在正确聚焦编辑器时遇到了问题。 您可以通过执行
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);
如果使用不同的
VK\u?
键事件(即VK\u B
)运行完全相同的代码,它是否工作?此外,由于ASCII代码100
是小写d
,而不是数字4
,因此似乎存在一些混淆。是的,与VK_4完全相同的代码可以正常工作。不过,似乎VK_B也不起作用。如果您交替发送VK_4
和VK_A
,从VK_4
开始,该怎么办?您是否在没有A
s的情况下获得4
s?如果你从VK_A
开始,怎么样?请花点精力来尝试一下。我已经在这方面胡闹了很长一段时间,我遇到的所有行为似乎都没有意义。首先,VK_4
然后是VK_A
仅打印4
。我尝试将65到100循环作为按键/释放值,结果是oty]0123
的输出明显缺少很多值。我还尝试在不改变输出的情况下增加和减少发布之间的延迟。我还尝试了在InputEvent中单击其他鼠标1次,得到了相同的结果。双击也是一样的。提供一个明确的字符列表,列出可用字符和不可用字符。这似乎就是问题所在。我不得不将macalt+tab的VK\u-ALT
更改为VK\u-META
。不确定为什么BUTTON1\u MASK
或BUTTON1\u DOWN\u MASK
选择的窗口不正确。我相信这个问题可能与它运行在intellij运行区域有关。不过我不确定。