使用 java.awt.Robot 键入一个字符串



我已经知道如何使用 java.awt.Robot 通过 keyPress 键入单个字符,如下所示。如何简单地在文本框中一次输入整个预定义的String值?

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

常见的解决方案是使用剪贴板:

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

从Java 7开始,你也可以使用KeyEvent.getExtendedKeyCodeForChar(c)。仅小写的示例可以是:

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

您需要"键入"字符,这是一个新闻和发布操作...

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

现在你可以复制和粘贴它三次,但我只是把它放在一个循环中

您可以在字符串中输入值,然后可以使用该字符串,如 Eng.Fouad 所述。但是使用它没有乐趣,你可以试试这个

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

你也可以使用 Thread.sleep 这样它就可以慢慢地输入数据位。

这不会键入整个"字符串",但有助于一次键入除一个字符之外的任何内容。

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

看到它完美地工作,它很棒!虽然它不适用于无法通过 unicode 跟踪的特殊字符,如 |,!...等。

我想

我已经实现了更好的灵魂,也许有人发现它很有用(主要方法是从枚举键代码中读取所有值,而不是将其放入哈希图中,稍后使用它来查找整数键代码)

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

我还创建了一个键类来了解是键入大写还是小写字符:

public class Key {
    int keyCode;
    boolean uppercase;
//getters setter constructors}

最后,您可以像这样使用它(对于单个字符)robot.keyPress(charToKey('a').getKeyCode());如果要按大写字母,则必须同时按下和释放shift键

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

相关内容

最新更新