首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Robot 類實現鼠標鍵盤自動化控制完整指南

     編輯:Java 程式設計入門

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();
        }
    }
}

實務應用建議

  1. 異常處理:生產環境建議加入更完善的錯誤恢復機制,例如檢查目標視窗是否為活動狀態。
  2. 跨平台注意:關閉視窗的快捷鍵在 Linux 下可能為 Alt+W,需根據作業系統調整。
  3. 效能考量:大量操作時適當增加 delay 避免系統負載過高導致指令丟失。
  4. 安全性:Robot 類需要系統權限,簽名的 Applet 或 Web Start 應用需在 JNLP 中聲明 all-permissions。

總結

Java Robot 類為桌面自動化提供了底層支援,結合適當的封裝與流程控制,能夠構建強大的自動化測試腳本或 RPA(機器人流程自動化)工具。開發者應注意按鍵釋放的完整性、跨平台差異以及執行時機的同步控制,以確保自動化流程的穩定可靠。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved