Введите строку, используя 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"
Ответы
Ответ 1
Общим решением является использование буфера обмена:
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);
Ответ 2
Вам нужно "набрать" символ, который является нажатием кнопки "И"...
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
Теперь вы можете просто скопировать и вставить его три раза, но я просто поставлю его в цикле
Ответ 3
Вы можете ввести значение в строку, а затем вы можете использовать эту строку, как объясняется 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, чтобы он мог медленно вводить бит данных.
Ответ 4
Начиная с 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);
}
}
Ответ 5
Я думаю, что я реализовал лучшую душу, может быть, кто-то нашел ее полезной (основной подход - прочитать все значения из enum KeyCode, а не помещать их в HashMap и использовать позже, чтобы найти int key code)
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;
}
Я создал также ключевой класс, чтобы узнать, следует ли вводить прописные или строчные буквы char:
public class Key {
int keyCode;
boolean uppercase;
//getters setter constructors}
и, наконец, вы можете использовать его так (для одиночного символа) robot.keyPress(charToKey('a').getKeyCode());
Если вы хотите нажать верхний регистр, вам нужно одновременно нажать и отпустить клавишу сдвига.
Ответ 6
Это не вводит всю строку, но позволяет вводить все, что угодно, кроме одного символа за раз.
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, например, |,!... и т.д.