Как я могу заставить робота набирать `:`?
Я хочу напечатать :
используя 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);
Я надеюсь, что помог.
Хорошего дня.:)