9

我想:用 Java Robot 打字。但是,我得到一个IllegalArgumentException. 我的代码是:

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

例外是:

java.lang.IllegalArgumentException: Invalid key code.].

我也尝试过:

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

我怎么解决这个问题?

4

8 回答 8

17

尝试使用此代码:

robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);

与您输入的键盘一样:当您按 shift + ; 时。你需要模拟的一样。

尝试运行此代码只是为了尝试哪个适用于上述答案:

public class Test {
    public static void main(String[] args) {
        Robot robot;
        try {
            robot = new Robot();
            robot.keyPress(KeyEvent.VK_SHIFT);  
            robot.keyPress(KeyEvent.VK_SEMICOLON);  
            robot.keyRelease(KeyEvent.VK_SEMICOLON);  
            robot.keyRelease(KeyEvent.VK_SHIFT);
        } catch (AWTException e) {
            // TODO Auto-generated catch bloc
            e.printStackTrace();
        }


    }
}
于 2011-04-20T20:23:31.720 回答
4

不幸的是,JavaRobot类依赖于一个特定于平台的未记录接口的实现,称为java.awt.peer.RobotPeer. 平台特定的实现决定了哪些按键事件是合法的或非法的。

在我的 Windows XP 机器上,这很好用:

public static void main(final String[] args) throws InterruptedException, IOException {
    Robot robot;
    try {
        robot = new Robot();
        robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SHIFT);
    } catch (final AWTException e) {
        // TODO Auto-generated catch bloc
        e.printStackTrace();
    }
}

在不同的平台上,您可能想尝试:

public static void main(final String[] args) throws InterruptedException, IOException {
    Robot robot;
    try {
        robot = new Robot();
        robot.keyPress(KeyEvent.VK_COLON);
        robot.keyRelease(KeyEvent.VK_COLON);
    } catch (final AWTException e) {
        // TODO Auto-generated catch bloc
        e.printStackTrace();
    }
}
于 2011-04-20T21:18:36.400 回答
3

试试这个代码;),也许它有帮助(使用 ascii 代码 alt+5+8=:):

robot9.delay(20);
robot9.keyPress(KeyEvent.VK_ALT);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD5);
robot9.keyRelease(KeyEvent.VK_NUMPAD5);
robot9.delay(20);
robot9.keyPress(KeyEvent.VK_NUMPAD8);
robot9.keyRelease(KeyEvent.VK_NUMPAD8);
robot9.delay(20);
robot9.keyRelease(KeyEvent.VK_ALT);
robot9.delay(20);
于 2014-06-16T13:29:24.713 回答
2

这似乎也取决于语言。在德语键盘上,使用 和 的VK_SHIFT组合 VK_PERIOD

于 2015-06-22T14:05:15.873 回答
1

有人构建了一个 KeyboardKeys 类并在 SO 中发布了它。它位于https://stackoverflow.com/a/20979488/7069565。简而言之,他将每个字符键入为 Alt + Number 组合。

于 2016-10-28T01:16:06.687 回答
0

我不了解 Java 机器人,但如果您使用 shift,那么您不应该输入分号,因为 shift + 分号 = 冒号。所以这可能是一个非法参数,因为冒号不是键,分号才是。

于 2011-04-20T20:22:30.300 回答
0

试试这个代码


        case KeyEvent.VK_SEMICOLON:
            if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
               System.out.println(":");
            else
                System.out.print(";");
            break;
于 2014-03-07T12:38:25.560 回答
0

分号是“大写字母”,即只有通过 Keys 的组合才能得到

Shift+昏迷

试试这个:

robot = new Robot();
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COMMA);
//Since you have the Shift pressed it will generate a semi colon.
robot.keyRelease(KeyEvent.VK_COMMA);
robot.keyRelease(KeyEvent.VK_SHIFT);

我希望我有所帮助。

祝你今天过得愉快。:)

于 2016-10-28T12:08:01.993 回答