プログラマメモ2 - programmer no memo2

[java] Robotつかってペースト 2008/03/14

Javaです。

Robot使ってマウスを移動させて、プレスして、それから値をペーストです。

Windowsの外字入力をするのが面倒だったので、文字列を生成してクリップボードにコピーしてペーストしています。

kepressを続けておこなえば、同時押しのようになるのでctrl + vができるというわけなのですね。

えーと、注意しないといけないのは、マウスでpressしたら、release.
キーを入力したリリースするのを忘れないように。

GUIの開発でテストを自動化しようと思ったら、ショットカットキーをいろいろ用意しておいたほうがよさげですね。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

public class TestRobot_2 {

public static void main(String[] args) throws AWTException {
a();
}

/*
* 値を生成して、テキストフィールドがあるアプリケーションのマウスを移動させて、クリックして値をペーストしてみる。
*
*/
static void a() throws AWTException {
Robot robot = new Robot();
// 特定の文字列を生成
char base = 0xe520;// unicode
StringBuilder builder = new StringBuilder();
for (char i = base; i < 0xe5e0; i++) {
builder.append(i);
}

// クリップボードに値をコピー
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection = new StringSelection(new String(builder));
clipboard.setContents(selection, null);

// ここの位置に入力するためのフィールドがあると考えてマウスを移動...
robot.mouseMove(-600, 400);

// 入力フィールドにマウスをプレス
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

robot.delay(300);

// ペースト
p(robot);
}

// ペーストします(ctrl + v)
static void p(Robot robot) {
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_V);
}
}

: