Как я могу заставить робота набирать `:`?

Я хочу напечатать : используя 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 ответов

Решение

Попробуйте этот код:

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=:):

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

Это также, кажется, зависит от языка. На немецкой клавиатуре, используя комбинацию VK_SHIFT а также VK_PERIOD работал.

Кто-то создал класс KeyboardKeys и опубликовал его здесь, в SO. это в /questions/18242807/nevernyij-kod-klyucha-java/18242825#18242825. В двух словах, он вводит каждый символ как комбинацию Alt + Number.

Попробуйте этот код


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

Я не знаю о Java-роботах, но если вы используете shift, не следует ли вводить точку с запятой, потому что shift + точка с запятой = двоеточие. Так что это, вероятно, незаконный аргумент, потому что двоеточие не ключ, точка с запятой.

Точка с запятой - это буква "upercase leter", то есть вы можете получить ее только с помощью комбинации клавиш.

Shift+Coma

Попробуй это:

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

Я надеюсь, что помог.

Хорошего дня.:)

Другие вопросы по тегам