Javaでキーボードマクロ

java.awt.Robotでマウスやキー入力ができる。
ウィンドウのタイトル取得/アクティブ化や文字列ペーストとかできたらたいがい事足りるのになー。



ためしに、Hyper E Tradeというツールを起動してログインして、パスワード入力省略のためにもっかいパスワードを入力するという処理を書いてみた。


import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;


public class RobotTest {

private static Robot robot;
private static String hetPassword = "*****";//←自分のパスワード

public static void main(String[] args) throws Exception {

String command = "C:\\Program Files\\E*TRADE JAPAN\\HYPER E*TRADE\\ETHtsMain.exe";
Runtime.getRuntime().exec(command);

robot = new Robot();
robot.delay(1000);
//robot.keyPress(KeyEvent.VK_TAB);
mouseClick(919, 512);
sendKey(hetPassword);
mouseClick(861, 604);
robot.delay(5000);
mouseClick(260,15);
sendKey(hetPassword);
}

private static void mouseClick(int x, int y){
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.delay(100);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(100);
}

private static void sendKey(String text){
for(int i=0; i

  • Robot#keyPress(char)にkeyCodeをわたすが、Unicodeからのマッピングしてくれるモノがみあたらないので苦し紛れの自分適当マッピング。英数字しかダメで大文字小文字もなければ、アンダーバーとかの記号も未対応
  • 日本語やら入力したいときもあるかもしれんし、文字列はどのみち、java.awt.datatransfer.Clipboardとか使ってクリップボード経由のコピーしないといかんか。クリップボードの操作もやったことないがまためんどそうな。。。
  • まぁ、無理やりJavaでする必要もないのではあるが、せっかくRobotクラスとかあったのでなんとかしたいもの
  • クリック座標やdeleyの長さとかはPCの画面や性能などに応じて適当に調節。