この記事は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;
}
}
以上がコードになります。
面倒な方はコピペしてファイルのディレクトリを指定して頂ければと思います。
// 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を知っていれば簡単なプログラムだったかと思います。
お疲れさまでした。