Java.awt.Robot'u kullanarak bir Dize yazın

Aşağıda görüldüğü gibi keyPress kullanarak tek bir karakter yazmak için java.awt.Robot 'un nasıl kullanılacağını zaten biliyorum. Bir metin kutusuna tam önceden tanımlanmış bir String değerini aynı anda nasıl girebilirim?

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

7 cevap

Yaygın çözüm, panoyu kullanmaktır:

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

Bir basın AND bırakma eylemi olan karakteri "yazmanız" ...

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

Şimdi sadece üç kez kopyalayıp yapıştırabilirsiniz, ama sadece bir döngü içine koyardım

6
katma
111 sadece bir örnek. Diyelim ki "Merhaba dünya" yazsın!
katma yazar user1196937, kaynak

Bir dizgeye değer girebilir ve daha sonra Eng.Fouad tarafından açıklandığı gibi bu dizgiyi kullanabilirsiniz. Ama onu kullanmakta eğlenmek yok, bunu deneyebilirsin

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

Ayrıca Thread.sleep programını kullanarak veri bitini yavaşça girmesini sağlayabilirsiniz.

3
katma

Java 7'den beri, KeyEvent.getExtendedKeyCodeForChar (c) öğesini de kullanabilirsiniz. Sadece küçük harf için bir örnek olabilir:

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);
    }
}
3
katma
Teşekkürler. Büyük harf Character.isUpperCase (c) ile kolayca kontrol edilebilir.
katma yazar lazlev, kaynak

Sanırım daha iyi bir ruh hali uyguladım, belki birisi yararlı buldu (ana yaklaşım enum KeyCode'daki tüm değerleri okumak ve bunu HashMap'e koymak ve daha sonra bir int anahtar kodu bulmak için kullanmaktır).

public class KeysMapper {

    private static HashMap charMap = new HashMap();

    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 stringToKeys(String text){
        List keys = new ArrayList();
        for (char c : text.toCharArray()) {
            keys.add(charToKey(c));
        }
        return keys;
    }

Ayrıca büyük harfli veya küçük harfli bir karakter yazıp yazmayacağınızı bilmek için bir anahtar sınıf oluşturdum:

public class Key {

    int keyCode;
    boolean uppercase;

//getters setter constructors}

ve nihayet böyle kullanabilirsiniz (tek karakter için) robot.keyPress (charToKey ('a'). getKeyCode ()); Bir büyük harfe basmak istiyorsanız, aynı anda shift tuşuna basıp bırakmanız gerekir.

1
katma

StringSelection path = new StringSelection ("belgenizin yolu");

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

}
1
katma

Bu, tüm "dizge" yi yazmaz ancak bir seferde bir karakterden başka ne istersen onu yazmana yardım eder.

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

       }

Gördüğünüz gibi mükemmel çalışıyor ve harika! Buna rağmen, |,! ... etc gibi unicode tarafından izlenemeyen özel karakterler için çalışmaz.

0
katma