Je sais déjà comment utiliser Java.awt.Robot
pour taper un seul caractère à l'aide de keyPress
, comme indiqué ci-dessous. Comment puis-je simplement entrer un entier prédéfini String
valeur à la fois dans une zone de texte?
robot.keyPress(KeyEvent.VK_1);
robot.keyPress(KeyEvent.VK_1);
robot.keyPress(KeyEvent.VK_1);
// instead, enter String x = "111"
La solution courante consiste à utiliser le presse-papiers:
String text = "Hello World";
StringSelection stringSelection = new StringSelection(text);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
Vous devez "taper" le caractère, qui est une action presse ET relâche ...
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
Maintenant, vous pouvez simplement copier et coller trois fois, mais je voudrais simplement le mettre en boucle
Depuis Java 7, vous pouvez également utiliser KeyEvent.getExtendedKeyCodeForChar (c). Un exemple pour les minuscules seulement pourrait être:
void sendKeys(Robot robot, String keys) {
for (char c : keys.toCharArray()) {
int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
if (KeyEvent.CHAR_UNDEFINED == keyCode) {
throw new RuntimeException(
"Key code not found for character '" + c + "'");
}
robot.keyPress(keyCode);
robot.delay(100);
robot.keyRelease(keyCode);
robot.delay(100);
}
}
Vous pouvez entrer une valeur dans une chaîne et vous pouvez ensuite utiliser cette chaîne comme expliqué par Eng.Fouad. Mais il n’ya aucun plaisir à l’utiliser, vous pouvez essayer ceci
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_H);
robot.keyRelease(KeyEvent.VK_H);
robot.keyPress(KeyEvent.VK_E);
robot.keyRelease(KeyEvent.VK_E);
robot.keyPress(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_L);
robot.keyPress(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_L);
robot.keyPress(KeyEvent.VK_O);
robot.keyRelease(KeyEvent.VK_O);
et vous pouvez également utiliser Thread.sleep pour qu’il puisse entrer le bit de données lentement.
Je pense que j'ai implémenté une meilleure âme, peut-être que quelqu'un l'a trouvé utile (la principale approche consiste à lire toutes les valeurs de enum KeyCode et à le mettre dans un HashMap et à l'utiliser plus tard pour trouver un code de clé int)
public class KeysMapper {
private static HashMap<Character, Integer> charMap = new HashMap<Character, Integer>();
static {
for (KeyCode keyCode : KeyCode.values()) {
if (keyCode.impl_getCode() >= 65 && keyCode.impl_getCode() <= 90){
charMap.put(keyCode.getName().toLowerCase().toCharArray()[0], keyCode.impl_getCode());
}
else{
charMap.put(keyCode.getName().toLowerCase().toCharArray()[0], keyCode.impl_getCode());
}
}
}
public static Key charToKey(char c){
if(c>=65 && c<=90){
return new Key(charMap.get(c), true);
} else {
return new Key(charMap.get(c), false);
}
}
public static List<Key> stringToKeys(String text){
List<Key> keys = new ArrayList<Key>();
for (char c : text.toCharArray()) {
keys.add(charToKey(c));
}
return keys;
}
J'ai également créé une classe de clé pour savoir s'il faut taper un caractère majuscule ou minuscule:
public class Key {
int keyCode;
boolean uppercase;
//getters setter constructors}
et finalement vous pouvez l'utiliser comme ça (pour un seul caractère) robot.keyPress(charToKey('a').getKeyCode());
Si vous voulez appuyer sur une majuscule, vous devez appuyer simultanément sur la touche Maj et la relâcher
StringSelection path = new StringSelection("path of your document ");
// create an object to desktop
Toolkit tol = Toolkit.getDefaultToolkit();
// get control of mouse cursor
Clipboard c = tol.getSystemClipboard();
// copy the path into mouse
c.setContents(path, null);
// create a object of robot class
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_V);
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
}
Cela ne tape pas la "chaîne" entière mais aide à taper tout ce que vous voulez, sauf un caractère à la fois.
Runtime.getRuntime().exec("notepad.exe");//or anywhere you want.
Thread.sleep(5000);//not required though gives a good feel.
Robot r=new Robot();
String a="Hi My name is Whatever you want to say.";
char c;
int d=a.length(),e=0,f=0;
while(e<=d)
{
c=a.charAt(e);
f=(int) c; //converts character to Unicode.
r.keyPress(KeyEvent.getExtendedKeyCodeForChar(f));
e++;
Thread.sleep(150);
}
voyez cela fonctionne parfaitement et c'est génial! Bien que cela ne fonctionne pas pour les caractères spéciaux qui ne peuvent pas être suivis par unicode comme |,! ... etc.