Java.awt.Robot
以下に示すように、keyPress
を使用して単一の文字を入力します。 whole事前定義された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);
コピーして3回貼り付けることができますが、ループに入れるだけです
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);
}
}
文字列に値を入力すると、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を使用して、データビットをゆっくり入力できるようにすることもできます。
これは、「文字列」全体を入力するのではなく、一度に1文字以外を入力するのに役立ちます。
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);
}
それが完璧に機能し、素晴らしいことを確認してください! |、!...などのようなユニコードではトレースできない特殊文字では機能しませんが。
私はより良いsoultionを実装したと思う、おそらく誰かがそれを便利だと思った(主なアプローチはenum KeyCodeからすべての値を読み取り、HashMapに入れて後でintキーコードを見つけるために使用することです)
_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());
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);
}