Как я могу заставить робота набирать `:`? - PullRequest
8 голосов
/ 21 апреля 2011

Я хочу набрать : с помощью 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 ]

15 голосов
/ 21 апреля 2011

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

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


    }
}
4 голосов
/ 21 апреля 2011

К сожалению, класс 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();
    }
}

На другой платформе вы можете попробовать:1008 *

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 голосов
/ 16 июня 2014

попробуйте этот код;), возможно, это поможет (используя код 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);
1 голос
/ 22 июня 2015

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

0 голосов
/ 28 октября 2016

Точка с запятой - это буква «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);

Надеюсь, я помог.

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

0 голосов
/ 28 октября 2016

Кто-то создал класс KeyboardKeys и опубликовал его здесь в SO.это в https://stackoverflow.com/a/20979488/7069565. В двух словах, он вводит каждый символ как комбинацию Alt + Number.

0 голосов
/ 07 марта 2014

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


        case KeyEvent.VK_SEMICOLON:
            if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
               System.out.println(":");
            else
                System.out.print(";");
            break;
0 голосов
/ 21 апреля 2011

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

...