首页 > 解决方案 > Java:使用机器人类按 ENTER 键不起作用

问题描述

r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);

由于某种原因它不起作用。当我手动单击 ENTER 时,它确实有效。如何解决这个问题?

需要手动按下时是否有某些对话框?因为在此问题发生之前有几个对话框,所以在机器人上单击 ENTER 可以正常工作。所以,似乎是一个特殊的对话?!

有“特殊对话”吗?如果,如何自动ENTER点击这些?


在 Windows 7 和 10 上。

编辑:

整个代码在下面。

Robot r = new Robot();

            r.keyPress(KeyEvent.VK_SHIFT);
            r.keyPress(KeyEvent.VK_F10);
            r.keyRelease(KeyEvent.VK_F10);
            r.keyRelease(KeyEvent.VK_SHIFT);

            r.keyPress(KeyEvent.VK_DOWN);
            r.keyRelease(KeyEvent.VK_DOWN);
            r.keyPress(KeyEvent.VK_DOWN);
            r.keyRelease(KeyEvent.VK_DOWN);
            r.keyPress(KeyEvent.VK_DOWN);
            r.keyRelease(KeyEvent.VK_DOWN);

            r.keyPress(KeyEvent.VK_ENTER);
            r.keyRelease(KeyEvent.VK_ENTER);
            // ABOVE ENTER WORKS FINE! THEN A NEW WINDOW IS OPENED

            // HERE IT STOPS WORKING!
            r.keyPress(KeyEvent.VK_ENTER);
            r.keyRelease(KeyEvent.VK_ENTER);

            r.keyPress(KeyEvent.VK_ENTER);
            r.keyRelease(KeyEvent.VK_ENTER);

            r.keyPress(KeyEvent.VK_ENTER);
            r.keyRelease(KeyEvent.VK_ENTER);

            r.keyPress(KeyEvent.VK_DOWN);
            r.keyRelease(KeyEvent.VK_DOWN);

我把命令放在哪里它停止工作。

就在该命令之前,会打开一个新窗口。现在,也许下一个 ENTER 不再被识别,因为没有焦点?

但是,我不这么认为。因为当我手动单击 ENTER(不单击其他任何内容或移动鼠标)时,它确实有效。所以显然焦点在那里。

标签: javawindows

解决方案


来自 Java 教程:“对于影响组件的按键,该组件必须具有键盘焦点”。

将焦点设置在您希望检测 keyPress 事件的组件上,如下所示:

component.requestFocusInWindow();

在您的情况下,您可能希望检测窗口打开事件然后设置焦点。


推荐阅读