2015-04-16 16 views
19

So già come utilizzare java.awt.Robot per digitare un singolo carattere utilizzando keyPress, come indicato di seguito. Come posso semplicemente inserire unoString valore 1 in una casella di testo? predefinito?Digitare una stringa utilizzando java.awt.Robot

robot.keyPress(KeyEvent.VK_1); 
robot.keyPress(KeyEvent.VK_1); 
robot.keyPress(KeyEvent.VK_1); 
// instead, enter String x = "111" 

risposta

29

soluzione comune è di utilizzare la clipboard:

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); 
6

È necessario "tipo" il personaggio, che è un premere e rilasciare azione ...

robot.keyPress(KeyEvent.VK_1); 
robot.keyRelease(KeyEvent.VK_1); 

Ora potrei semplicemente copiarlo e incollarlo tre volte, ma lo metterei in un loop

+1

111 è solo un esempio. Diciamo che voglio che entri in '" Hello world "'! –

3

Puoi inserire un valore in una stringa e poi puoi usare quella stringa come spiegato da Eng.Fouad. Ma non c'è divertimento a usarlo, si può dare una prova di questo

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

e si può anche utilizzare Thread.sleep in modo che possa entrare in bit di dati lentamente.

1

Penso di aver implementato un'anima migliore, forse qualcuno l'ha trovato utile (l'approccio principale è quello di leggere tutti i valori da enum KeyCode e poi di inserirlo in una HashMap e usarlo in seguito per trovare un codice chiave 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; 
    } 

ho creato anche una classe chiave per sapere se per digitare un carattere maiuscolo o minuscolo:

public class Key { 

    int keyCode; 
    boolean uppercase; 

//getters setter constructors} 

e, infine, è possibile utilizzarlo come quella (per singolo carattere) robot.keyPress(charToKey('a').getKeyCode()); Se si desidera premere un maiuscolo hai t o premere e rilasciare contemporaneamente con il tasto Maiusc

3

Poiché Java 7 è anche possibile utilizzare KeyEvent.getExtendedKeyCodeForChar (c). Un esempio per minuscole solo potrebbe essere:

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); 
    } 
} 
+0

Grazie. La maiuscola può essere facilmente verificata con 'Character.isUpperCase (c)'. – lazlev

0

Questo non digitare l'intero "stringa", ma aiuta a scrivere quello che vuoi diverso da un carattere alla volta.

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

     } 

vedere funziona perfettamente ed è fantastico! Anche se non funziona per caratteri speciali che non possono essere tracciati da unicode come |,! ... ecc.

1

StringSelection path = new StringSelection ("percorso del documento");

// 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); 

}