Java 如何使机器人类型a`:`?

Java 如何使机器人类型a`:`?,java,awtrobot,Java,Awtrobot,我想使用Java Robot键入:。但是,我得到了一个非法argumentexception。我的代码是: robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_COLON); robot.keyRelease(KeyEvent.VK_COLON); robot.keyRelease(KeyEvent.VK_SHIFT); 例外情况是: java.lang.IllegalArgumentException: Invalid

我想使用Java Robot键入
。但是,我得到了一个
非法argumentexception
。我的代码是:

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

我怎样才能解决这个问题呢?

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

请尝试以下代码:

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


    }
}

不幸的是,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();
    }
}
试试这个代码


请尝试以下代码;),可能会有帮助(使用ascii代码alt+5+8=:):


这似乎也与语言有关。在德国键盘上,结合使用
VK_SHIFT
VK_PERIOD
有效。

有人构建了一个KeyboardKeys类,并在SO中发布了它。它在。简而言之,他将每个字符都按Alt+数字组合输入

分号是一个“超级用例删除器”,也就是说,只有组合键才能得到它

移位+昏迷

试试这个:

robot=新机器人();
机器人按键(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_逗号);
//由于按下Shift键,因此将生成分号。
robot.keyrease(KeyEvent.VK_逗号);
机器人。按键释放(按键事件。VK_移位);
我希望我帮了忙


祝你今天愉快。:)

结果是相同的:线程“main”java.lang.IllegalArgumentException中的异常:java.awt.Robot.keyPress(未知源)中sun.awt.windows.WRobotPeer.keyPress(本机方法)的键代码无效。问题是分号keypevent。如果我执行这段代码,我会得到同样的异常,但是在终止它之后,shift键“仍然被按下”。这段代码对你有用吗?@Eric在我的Windows XP框中,上面的代码工作正常。如果您仍然遇到错误,我会尝试在不使用
VK\u SHIFT
修饰符的情况下执行
keyPress(KeyEvent.VK\u COLON)
。谢谢。该概念适用于:和\符号。因此,我可以在弹出式文件浏览器中键入文件位置。你帮我省了几个小时。谢谢。
        case KeyEvent.VK_SEMICOLON:
            if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
               System.out.println(":");
            else
                System.out.print(";");
            break;
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);