使用java.awt.Robot键入String

我已经知道如何使用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); 

你需要“输入”这个角色,这是一个按下并释放动作……

 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,这样它就可以慢慢输入数据。

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

我认为我已经实现了更好的灵魂,也许有人发现它很有用(主要方法是从枚举KeyCode中读取所有值,然后将其放入HashMap并稍后使用它来查找int键代码)

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

我还创建了一个关键类来知道是否键入大写或小写字符:

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

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

StringSelection path = new StringSelection(“文档的路径”);

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

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

  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无法追踪的特殊字符。