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