java.awt.Robot 類提供程式化控制滑鼠與鍵盤的能力,廣泛應用於自動化測試、桌面自動化腳本、演示錄製等場景。一旦取得控制權,Java 代碼即可模擬任意滑鼠鍵盤操作。
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class RobotExp {
public static void main(String[] args) {
try {
Robot robot = new Robot();
// 5秒延遲,留時間開啟記事本
robot.delay(5000);
robot.keyPress(KeyEvent.VK_H);
robot.keyPress(KeyEvent.VK_I);
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyPress(KeyEvent.VK_C);
robot.keyPress(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_O);
robot.keyPress(KeyEvent.VK_E);
robot.keyPress(KeyEvent.VK_R);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
注意:keyPress 只模擬按下,實際應用需配合 keyRelease 釋放按鍵,否則系統會視為長按。
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;
public class RobotExp {
// 單鍵按下並釋放
public static void pressKey(Robot robot, int keyvalue) {
robot.keyPress(keyvalue);
robot.keyRelease(keyvalue);
}
// Shift 組合鍵
public static void pressKeyWithShift(Robot robot, int keyvalue) {
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(keyvalue);
robot.keyRelease(keyvalue);
robot.keyRelease(KeyEvent.VK_SHIFT);
}
// 關閉應用程式 (Alt+F4)
public static void closeApplication(Robot robot) {
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_F4);
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_F4);
// Linux 替代: Alt+W
robot.keyPress(KeyEvent.VK_N); // 確認不儲存
robot.keyRelease(KeyEvent.VK_N);
}
public static void main(String[] args) throws IOException {
try {
Robot robot = new Robot();
Runtime.getRuntime().exec("notepad"); // 啟動記事本
robot.delay(3000);
for (int i = 0; i < 100; i++) {
pressKeyWithShift(robot, KeyEvent.VK_H); // H
pressKey(robot, KeyEvent.VK_I); // i
pressKey(robot, KeyEvent.VK_SPACE); // 空格
pressKeyWithShift(robot, KeyEvent.VK_I); // I
pressKey(robot, KeyEvent.VK_SPACE);
pressKey(robot, KeyEvent.VK_A);
pressKey(robot, KeyEvent.VK_M);
pressKey(robot, KeyEvent.VK_SPACE);
pressKey(robot, KeyEvent.VK_T);
pressKey(robot, KeyEvent.VK_H);
pressKey(robot, KeyEvent.VK_E);
pressKey(robot, KeyEvent.VK_SPACE);
pressKey(robot, KeyEvent.VK_J);
pressKey(robot, KeyEvent.VK_A);
pressKey(robot, KeyEvent.VK_V);
pressKey(robot, KeyEvent.VK_A);
pressKey(robot, KeyEvent.VK_SPACE);
pressKey(robot, KeyEvent.VK_R);
pressKey(robot, KeyEvent.VK_O);
pressKey(robot, KeyEvent.VK_B);
pressKey(robot, KeyEvent.VK_O);
pressKey(robot, KeyEvent.VK_T);
pressKey(robot, KeyEvent.VK_ENTER);
}
closeApplication(robot);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
| 方法 | 說明 |
|---|---|
keyPress(int keycode) | 模擬按下指定鍵 |
keyRelease(int keycode) | 模擬釋放指定鍵 |
mouseMove(int x, int y) | 移動滑鼠至絕對座標 |
mousePress(int buttons) | 按下滑鼠鍵 (InputEvent.BUTTON1_MASK 等) |
mouseRelease(int buttons) | 釋放滑鼠鍵 |
delay(int ms) | 暫停指定毫秒 |
createScreenCapture(Rectangle rect) | 截取螢幕區域 |
AWTException(無法建立 Robot 實例時拋出)all-permissions