Почему `robot.keyRelease (KeyEvent.VK_CONTROL)` необходим? - PullRequest
0 голосов
/ 06 сентября 2011

При использовании класса Robot, что означает:

robot.keyRelease(KeyEvent.VK_CONTROL);

Разве приведенный ниже код не может быть достаточным для отправки события?

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

keyPress отправит событие, когда клавиша была нажата. keyRelease отправит событие, когда ключ был выпущен. Если вы хотите имитировать набор текста, вы можете сделать что-то вроде:

public class SuperRobot extends Robot {
    public void typeKey(int keyCode) {
        keyPress(keyCode);
        delay(20);
        keyRelease(keyCode);
    }
}

public static void main(String[] args) {
    try {
        SuperRobot r = new SuperRobot();
        // Now, let's press Ctrl+A
        r.keyPress(KeyEvent.VK_CONTROL);
        r.typeKey(KeyEvent.VK_A);
        r.keyRelease(KeyEvent.VK_CONTROL);
    } catch (Exception ex) { // Either AWTException or SecurityException
        System.out.println("Oh no!");
    }
}

Обратите внимание, что для ввода чего-либо с маской, такой как Ctrl + A, мы сначала нажимаем Ctrl, затем моделируем нажатие и отпускание A, затем отпускаем Ctrl. Как правило, робот должен более или менее точно имитировать то, что вы, как пользователь, делаете.

0 голосов
/ 06 мая 2014
robot.keyRelease(KeyEvent.VK_CONTROL); 

Для отпускания эффекта нажатия на клавишу, если вы нажали клавишу, используя robot.keyPress (KeyEvent.VK_CONTROL);Затем вы должны отпустить его тоже, иначе, как только ваше java-приложение запустится, клавиатура продолжит работу с фактически нажатой клавишей CTRL.

...