[Java] Robotクラスを使ってマウスを自動操作する方法

2017年8月5日(更新: 2017年8月7日)

Java のクラス Robotjava.awt.Robot) を使用して、マウスの操作を自動化する方法についてです。

自動で規則正しい運動をするマウス

Javaを開発できる環境があれば、簡単にマウスを自動的に移動させたりクリックさせたりすることができます。ホイールやドラッグ操作、キーボードの入力も同じクラスで自動化可能です。

(Javaの開発環境の作り方については、こちらの記事をご覧ください → Javaの開発用ソフト Eclipseのインストールと使い方

ソースコードの作成

Javaのソースコード(.java)を作成します。この記事では、開発環境に Eclipse を使用しているとして話を進めます。

以下のようにプロジェクトおよびプログラムを書くためのソースコードファイルを作成したとします。

EclipseでJavaのプロジェクトを新規作成

今回、ソースコードファイルの名前を Main.java としましたが、任意の名前で構いません。また、作成時にmainメソッドを自動的に挿入するチェックを入れると楽に作業を進められます。

mainメソッドを自動挿入してソースコード(.java)の作成

以下のように、mainメソッドのみのクラスができたら、プログラムを書く準備は完了です。

メインメソッドのみのクラスファイルを作成

TODOコメントは削除して構いません。

Robotクラスの利用準備

Robotクラスを利用するための下準備をします。以下のようにプログラムを書き換えてください。

import java.awt.AWTException;
import java.awt.Robot;

public class Main {

  public static void main(String[] args) throws AWTException {
    
    Robot robot = new Robot();
  }
}

以下の一行をmainメソッド内に書いて、エラーを自動修正機能で補正していくと簡単にできます。

Robot robot = new Robot();

Eclipseの補完機能でRobotクラスに必要な準備を行う例

手で入力してもコピペしても構いません。これで、Robotクラスを使う準備が整いました。

マウスの位置を自動的に移動させる

まずは、最も基本となるマウスポインターの位置の移動方法についてです。マウスの位置設定を行うには、Robotクラスにある以下のメソッドを使用します。

mouseMove(int x, int y)

以下は、このメソッドを利用した、マウスを画面の中心に移動させるプログラムです。画面全体のサイズを取得するために、クラス Toolkit を使用しています。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;

public class Main {

  public static void main(String[] args) throws AWTException {
    
    // 画面の幅
    int screenWidth =  Toolkit.getDefaultToolkit().getScreenSize().width;
    
    // 画面の高さ
    int screenHeight =  Toolkit.getDefaultToolkit().getScreenSize().height;
    
    Robot robot = new Robot();
    
    // マウスを画面の中央に移動させる
    robot.mouseMove(screenWidth / 2, screenHeight / 2);
  }
}

(追加した部分をハイライトしています)

このプログラムを実行すると、その瞬間にマウスが画面中央に移動します。

一度移動しただけではわかりにくいので、次は何回かマウスの位置を変える例を紹介します。

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;

public class Main {

  public static void main(String[] args) throws AWTException {
    
    // 画面の幅
    int screenWidth =  Toolkit.getDefaultToolkit().getScreenSize().width;
    
    // 画面の高さ
    int screenHeight =  Toolkit.getDefaultToolkit().getScreenSize().height;
    
    Robot robot = new Robot();
    
    // マウスを画面の中央に移動させる
    robot.mouseMove(screenWidth / 2, screenHeight / 2);
    // 次の動作の前に0.5秒待つ
    robot.delay(500);
    robot.mouseMove(screenWidth / 2 + 100, screenHeight / 2);
    robot.delay(500);
    robot.mouseMove(screenWidth / 2 + 200, screenHeight / 2);
  }
}

連続で自動操作を行う場合、一つひとつの動作の間に待ち時間(delay)を指定しないと、複数の連続処理がほぼ同時に実行されてしまい、目で確認することができません。

そこで、以下のメソッドを使用して操作の間に待ち時間を設定しています。

delay(int ms);

待ち時間の指定はミリ秒で行うので、500 と設定すると 0.5秒 の待ち時間となります。

実際にこのプログラムを実行した結果を以下に示します。100pxずつマウスが右に2回移動します。

マウスのポイント位置を自動的に移動させた例

移動回数を増やして待ち時間を短くすると、記事冒頭の画像のようなスムーズな動作を自動的に行わせることが可能です。

マウスのクリックを自動化する

マウスの左クリック、右クリック、ホイールなどのクリックを自動化する方法です。

クリックさせるには以下のメソッドを使用します。

// マウスのボタンを押し込む
mousePress(int buttons);
// マウスのボタンを離す
mouseRelease(int buttons);

引数 buttons には、クリックするボタンの種類を指定します。マウスの拡張ボタンのクリックや複数同時のクリックなどの処理も可能です。詳しくはドキュメントをご覧ください。

Robot (Java Platform SE 7 )

ここでは、右クリックおよび左クリックについて紹介します。以下は、画面中央にマウスを移動させたあと、そこで右クリックをして現れたメニューから「ペースト」の位置にマウスを移動させて左クリックするプログラムです。


    ...(略)...

    Robot robot = new Robot();
    
    // マウスを画面の中央に移動させる
    robot.mouseMove(screenWidth / 2, screenHeight / 2);
    // 次の動作の前に0.5秒待つ
    robot.delay(500);
    // マウスの右クリック
    robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
    // 右クリック状態の解除
    robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
    robot.delay(500);
    // 「ペースト」の位置までマウスを移動(この値は環境によって異なります)
    robot.mouseMove(screenWidth / 2 + 100, screenHeight / 2 + 50);
    robot.delay(500);
    // マウスの左クリック
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
    // 左クリック状態の解除
    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
  }
}

使用するデバイスによって、ボタンに対応する値が異なる場合があります。Macbook Air では InputEvent.BUTTON1_DOWN_MASK が左クリック、InputEvent.BUTTON3_DOWN_MASK が右クリックに対応していました。

実行結果は以下のようになります。

右クリックおよび左クリックを自動化した例

mouseRelease でクリック状態を解除せずにマウスを移動させるとドラッグを行うことができます。

クリック間の待ち時間を設定しなければ、人間には不可能な速度でクリックを連打させることもできます。

以上、基本的なマウス操作の自動化についてでした。

同じようにキーボードの自動入力も設定できます。例えば、以下のコードは、数字の「1」のキーを50回入力します。

...

for (int i = 0; i < 50; i++) {
  robot.delay(10);
  robot.keyPress(KeyEvent.VK_1);
  robot.keyRelease(KeyEvent.VK_1);
}

...

自動入力するキーの指定には、KeyEventの定数を使用します。入力できるキーの種類については以下のドキュメントをご覧ください。

KeyEvent (Java Platform SE 8 )

コメントを残す

メールアドレスが公開されることはありません。