Java AWT 包中的 Robot 類提供了強大的功能,讓開發者能夠通過程式碼精確控制滑鼠移動、點擊以及鍵盤按鍵模擬。這項技術廣泛應用於自動化測試、桌面應用程式自動化操作以及演示程式的錄製等場景。本文將深入解析 Robot 類的核心用法,並提供兩個進階版本的完整程式碼範例供參考。
java.awt.Robot 類的主要方法包括:
keyPress(int keycode) / keyRelease(int keycode):模擬按鍵按下與釋放mouseMove(int x, int y):移動滑鼠游標至指定座標mousePress(int buttons) / mouseRelease(int buttons):模擬滑鼠按鍵操作delay(int ms):暫停執行指定毫秒數,便於同步操作注意:使用 Robot 類可能拋出 AWTException,需妥善處理異常。
以下程式碼演示如何在啟動後 5 秒內自動於記事本輸入「HI CAOER」字串:
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 而不釋放按鍵會導致按鍵「卡住」,實際專案中務必成對使用 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);
robot.keyPress(KeyEvent.VK_N); // 按 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);
// 迴圈輸出 100 行測試文字
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();
}
}
}
Alt+W,需根據作業系統調整。delay 避免系統負載過高導致指令丟失。all-permissions。Java Robot 類為桌面自動化提供了底層支援,結合適當的封裝與流程控制,能夠構建強大的自動化測試腳本或 RPA(機器人流程自動化)工具。開發者應注意按鍵釋放的完整性、跨平台差異以及執行時機的同步控制,以確保自動化流程的穩定可靠。