我怎样才能让机器人键入一个`:`?

时间:2011-04-20 20:18:27

标签: java awtrobot

我想使用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);

我该如何解决这个问题?

8 个答案:

答案 0 :(得分:15)

尝试使用此代码:

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();
        }


    }
}

答案 1 :(得分:4)

不幸的是,Java Robot类依赖于一个名为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();
    }
}

答案 2 :(得分:2)

试试这段代码;),也许有帮助(使用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);

答案 3 :(得分:1)

这似乎也取决于语言。在德语键盘上,使用VK_SHIFTVK_PERIOD的组合工作。

答案 4 :(得分:0)

我不了解Java机器人,但是如果你使用shift,那么你不应该输入分号,因为shift +分号=冒号。所以它可能是一个非法的论点,因为冒号不是关键,分号是。

答案 5 :(得分:0)

试用此代码


        case KeyEvent.VK_SEMICOLON:
            if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
               System.out.println(":");
            else
                System.out.print(";");
            break;

答案 6 :(得分:0)

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

答案 7 :(得分:0)

分号是一个“upercase leter”,也就是说,你只能使用Keys的组合

  

移+昏迷

试试这个:

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);

我希望我有所帮助。

祝你有个愉快的一天。 :)