JavaでVMwareを立ち上げ、ログインしよう

この記事はSECUREMATRIX(セキュアマトリクス)の自動ログインを行うために記載しております。

また、以下の続きになります。

自動ログインプログラムを作成しない方は読み飛ばしてください。

VmLogin.javaのソースコード及び解説

package smxVmLoginSample.smxVmLoginSample;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * Login
 *
 */
public class VmLogin{

	// VMのパスワード
	private final String vmPw;

	// コンストラクタ
	public VmLogin() throws IOException{

		// VMのパスワード取得
		FileInputStream fis = new FileInputStream("/*login.properiesまでのディレクトリを記載してください*/");
		Properties properties = new Properties();
		properties.load(fis);
		vmPw = properties.getProperty("vmPassword");

	}

	public void vmLogin(String smxPw) throws IOException, AWTException{

		// インスタンス生成
		Runtime runtime = Runtime.getRuntime();

		//exeを実行する
		runtime.exec("/*起動するexeファイルのディレクトリを記載してください*/");

		// インスタンス生成
		Robot robot = new Robot();

		// 5秒待つ
		robot.delay(5000);

		// Enterキーを押す
		enterPress(robot);

		// 5秒待つ
		robot.delay(5000);

		// パスワード入力を行う
		sendKeys(robot, smxPw);

		// 0.5秒待つ
		robot.delay(500);

		// Enterキーを押す
		enterPress(robot);

		// 3秒待つ
		robot.delay(5000);

		// パスワード入力を行う
		sendKeys(robot, getVmPw());

		// 0.5秒待つ
		robot.delay(500);

		// Enterキーを押す
		enterPress(robot);

	}

	/*
	 * Enterキーを押す
	 */
	private void enterPress(Robot robot) {

		// Enterキーを押す
		robot.keyPress(KeyEvent.VK_ENTER);
		// Enterキーを離す;
		robot.keyRelease(KeyEvent.VK_ENTER);

	}

	/*
	 * 入力を行う
	 */
	private 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 + "'");
			} else {
				robot.keyPress(keyCode);
				robot.delay(100);
				robot.keyRelease(keyCode);
				robot.delay(100);
			}
		}
	}

	public String getVmPw() {
		return vmPw;
	}


}

以上がコードになります。

面倒な方はコピペしてファイルのディレクトリを指定して頂ければと思います。

VMwareを立ち上げる

	// VMのパスワード
	private final String vmPw;

	// コンストラクタ
	public VmLogin() throws IOException{

		// VMのパスワード取得
		FileInputStream fis = new FileInputStream("/*login.properiesまでのディレクトリを記載してください*/");
		Properties properties = new Properties();
		properties.load(fis);
		vmPw = properties.getProperty("vmPassword");

	}

クラスの上部VMパスワードを他のクラスでは使用せず、変更もないと判断したためprivate finalで設定しました。

コンストラクタで login.propertiesにアクセスしデータを読み込み、VMwareのパスワードを取得します。

		// インスタンス生成
		Runtime runtime = Runtime.getRuntime();

		//exeを実行する
		runtime.exec("/*起動するexeファイルのディレクトリを記載してください*/");

Runtimeクラスのインスタンスを生成しexecメソッドでexeファイル(VMware)を起動します。

キーボード操作を行う

		// インスタンス生成
		Robot robot = new Robot();

		// 5秒待つ
		robot.delay(5000);

		// Enterキーを押す
		enterPress(robot);

		// 5秒待つ
		robot.delay(5000);

		// パスワード入力を行う
		sendKeys(robot, smxPw);

		// 0.5秒待つ
		robot.delay(500);

		// Enterキーを押す
		enterPress(robot);

		// 3秒待つ
		robot.delay(5000);

		// パスワード入力を行う
		sendKeys(robot, getVmPw());

		// 0.5秒待つ
		robot.delay(500);

		// Enterキーを押す
		enterPress(robot);

ここはコメント通りかと思います。

3秒や5秒待ったりしているのは自身のPCのスペックに合わせて

VMwareが立ち上がるまでの時間やページが切り替わるまでの最大の時間を考慮し入れてあります。

	/*
	 * Enterキーを押す
	 */
	private void enterPress(Robot robot) {

		// Enterキーを押す
		robot.keyPress(KeyEvent.VK_ENTER);
		// Enterキーを離す;
		robot.keyRelease(KeyEvent.VK_ENTER);

	}

上記もコメント通りです。

	/*
	 * 入力を行う
	 */
	private 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 + "'");
			} else {
				robot.keyPress(keyCode);
				robot.delay(100);
				robot.keyRelease(keyCode);
				robot.delay(100);
			}
		}
	}

	public String getVmPw() {
		return vmPw;
	}

この関数は入力するパスワードの文字列を一文字づつにわけ、

KeyEvent.getExtendedKeyCodeForCharメソッドでキーコードを取得します。

その後存在しないキーコードがあればエラーを出力します。

存在すればキーボードにあるキーを押して離します。

以上でVMwareを立ち上げてログインする方法です。

Javaを知っていれば簡単なプログラムだったかと思います。

お疲れさまでした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です