Comment faire un Robot de type a`:'?
je veux taper :
en utilisant le Robot Java. Cependant, je reçois un IllegalArgumentException
. Mon code est:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_COLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
l'exception est:
java.lang.IllegalArgumentException: Invalid key code.].
j'ai aussi essayé avec:
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
comment résoudre ce problème?
8 réponses
essayez avec ce code :
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SEMICOLON);
robot.keyRelease(KeyEvent.VK_SHIFT);
Comme avec le clavier, vous entrez : lorsque vous appuyez sur maj + ;. la même chose que vous devez simuler.
essayez d'exécuter ce code juste pour essayer ce qui fonctionne très bien avec la réponse ci-dessus:
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();
}
}
}
malheureusement, la classe Java Robot
repose sur une implémentation spécifique à une plate-forme d'une interface non documentée appelée java.awt.peer.RobotPeer
. La mise en œuvre spécifique de la plate-forme détermine quels événements clés de la presse sont légaux ou illégaux.
sur mon windows XP box, cela fonctionne très bien:
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();
}
}
sur une plateforme différente vous pouvez essayer:
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();
}
}
essayez ce code ;), peut-être qu'il aide (en utilisant le code 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);
Essayez Ce Code
case KeyEvent.VK_SEMICOLON:
if((event.getModifiers() & KeyEvent.KEY_PRESSED)!=0)
System.out.println(":");
else
System.out.print(";");
break;
cela semble aussi dépendre de la langue. Sur un clavier allemand, en utilisant la combinaison de VK_SHIFT
et VK_PERIOD
travaillé.
Je ne sais pas pour les Robots Java, mais si vous utilisez shift, vous ne devriez pas alors taper semicolon, parce que shift + semicolon = colon. Donc c'est probablement un argument illégal parce que colon n'est pas une clé, le point-virgule l'est.
quelqu'un a construit une classe KeyboardKeys et l'a publié ici dans SO. son à https://stackoverflow.com/a/20979488/7069565 . En un mot, il tape chaque caractère comme une combinaison Alt + nombre.
le point-virgule est un "Lettres majuscules", c'est-à-dire que vous ne l'obtenez qu'avec la combinaison des touches
Shift+Coma
essayez ceci:
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);
j'espère avoir aidé.
bonne journée. :)