Escriba una cadena usando java.awt.Robot

Ya sé cómo usar java.awt.Robotpara escribir un solo carácter usando keyPress, como se ve a continuación. ¿Cómo puedo simplemente ingresar un valor predefinido completo de una vez en un cuadro de texto? String

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

La solución común es usar el portapapeles:

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);
Respuesta: 2

Desde Java 7 también puede usar KeyEvent.getExtendedKeyCodeForChar (c). Un ejemplo para minúsculas solo podría ser:

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);
    }
}
Respuesta: 3

Debe "escribir" el carácter, que es una acción de presionar Y soltar ...

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

Ahora podría copiarlo y pegarlo tres veces, pero lo pondría en un bucle

Respuesta: 4

Puede ingresar el valor en una cadena y luego puede usar esa cadena como se explica en Eng.Fouad. Pero no es divertido usarlo, puedes intentarlo

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

y también puede usar Thread.sleep para que pueda ingresar bits de datos lentamente.

Respuesta: 5

Creo que he implementado una mejor alma, tal vez alguien lo encontró útil (el enfoque principal es leer todos los valores de enum KeyCode y no ponerlo en un HashMap y usarlo más tarde para encontrar un código de clave 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;
    }

También creé una clase clave para saber si escribir un carácter en mayúsculas o minúsculas:

public class Key {

    int keyCode;
    boolean uppercase;

//getters setter constructors}

y finalmente puede usarlo así (para un solo carácter) robot.keyPress(charToKey('a').getKeyCode()); Si desea presionar una mayúscula, debe presionar y soltar con la tecla Mayús simultáneamente

Respuesta: 6

Esto no escribe toda la "cadena", pero ayuda a escribir lo que quiera que no sea un carácter a la vez.

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

       }

¡Mira que funciona perfectamente y es increíble! Aunque no funciona para caracteres especiales que no pueden ser rastreados por unicode como |,! ... etc.

Respuesta: 7

Quiero probar un código que se basa en una transmisión de red. El código realiza una solicitud y proporciona una devolución de llamada: cuando se completa la solicitud, se activa la devolución de llamada. Me gustaría burlarme de la red ...

Estoy probando el programa VisualVM que viene con los nuevos JDK. Estoy haciendo perfiles en él e intentando perfilar CPU en solo métodos en un paquete particular. Puse lo siguiente en el "Perfil ...

Me gustaría crear un archivo XML usando Java. Estructura de mi archivo XML: <? Xml version = "1.0" encoding = "UTF-8"?> <CONFIGURATION> <BROWSER> chrome </BROWSER> <BASE> http: ...

Estoy usando 2 tablas (JTable) con sus DefaultTableModels. La primera tabla ya está poblada. La segunda tabla se rellena para cada fila de la primera tabla (utilizando una consulta SQL). Mi propósito es ...