java - 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(不单击其他任何内容或移动鼠标)时,它确实有效。所以显然焦点在那里。
解决方案
来自 Java 教程:“对于影响组件的按键,该组件必须具有键盘焦点”。
将焦点设置在您希望检测 keyPress 事件的组件上,如下所示:
component.requestFocusInWindow();
在您的情况下,您可能希望检测窗口打开事件然后设置焦点。
推荐阅读
- clojure - 如何从文件中一次读取一行文本,并将文本分配给 Clojure 中的变量
- c - 解释器中的手动与 GC 内存管理和使用 malloc/free
- json - 针对在 react-native 中使用 fetch 检索到的 json 对象验证数据
- reactjs - 命名 MyComponent 和的正确方法是什么
? - azure - 如何在 Azure 开发测试实验室中启用更新管理
- sql-server - 优化器的 SQL Server 查询格式
- php - 给定的 if 语句在 PHP 中是否正确?
- java - Spring data jpa Specification:如何比较日期列的年份
- javascript - Rails history.pushState 通过 AJAX 显示 URL
- android - 无法从 GreenRobotEventBus 更新回收站视图