java awt robot

Robot 类用于生成本机系统输入事件,用于测试自动化,自动运行演示和需要鼠标和键盘控制的其他应用程序。 Robot的主要目的是为了方便Java平台实现的自动化测试。

经过封装后的 Robot api 可以现实操作电脑的基本需求

public static void main(String[] args) {
    String outString = "Hello %s";
    for (int i = 0; i < 100; i++) {
        RobotUtils.output(String.format(outString, i));
        RobotUtils.enter();
    }
}

Robot Demo

/**
 * Robot的工具类
 */
@Slf4j
public class RobotUtils {

    /**
     * awt 机器人
     */
    private static Robot robot;

    /**
     * 基础延迟毫秒
     */
    private static int BaseTime = 100;

    /**
     * 随机数
     */
    private static Random random = new Random();

    static {
        try {
            robot = new Robot();
        } catch (AWTException e) {
            log.error("robot init exception: {}", e);
            throw new RuntimeException(e);
        }
    }

    public static Robot getRobot() {
        return robot;
    }

    /**
     * 按下某个键
     *
     * @param keyEvent
     */
    public static void key(KeyEvent keyEvent) {
        key(keyEvent.getExtendedKeyCode());
    }

    public static void key(int keyEvent) {
        robot.keyPress(keyEvent);
        robot.delay(getRandom());
        robot.keyRelease(keyEvent);
    }

    /**
     * 获取一个随机值
     */
    public static int getRandom() {
        return random.nextInt(10) + BaseTime;
    }

    /**
     * 获取鼠标当前位置
     */
    public static Point getMousePosition() {
        return MouseInfo.getPointerInfo().getLocation();
    }

    /**
     * 将鼠标移动到 x与y 轴
     *
     * @param x
     * @param y
     */
    public static void mouseMove(int x, int y) {
        robot.mouseMove(x, y);
    }

    /**
     * 部分情况下 mouseMove 无法做到精准位移不过通过这个方式多位移一下就好了
     */
    public static void mouseMove(int x, int y, int maxTimes) {
        for (int count = 0;
             (MouseInfo.getPointerInfo().getLocation().getX() != x ||
                     MouseInfo.getPointerInfo().getLocation().getY() != y) &&
                     count < maxTimes; count++) {
            robot.mouseMove(x, y);
        }
    }

    /**
     * 单击鼠标
     */
    public static void click() {
        robot.mousePress(KeyEvent.BUTTON1_MASK);
        robot.delay(getRandom());
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);
    }

    /**
     * 右击鼠标
     */
    public static void rightClick() {
        robot.mousePress(KeyEvent.BUTTON3_MASK);
        robot.delay(getRandom());
        robot.mouseRelease(KeyEvent.BUTTON3_MASK);
    }

    /**
     * 按下回车键
     */
    public static void enter() {
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.delay(getRandom());
        robot.keyRelease(KeyEvent.VK_ENTER);
    }

    /**
     * 输出一串字符
     *
     * @param text
     */
    public static void output(String text) {
        if (null != text && !text.isEmpty()) {
            char[] chars = text.toCharArray();
            for (char c : chars) {
                try {
                    RobotUtils.key(KeyEvent.getExtendedKeyCodeForChar(c));
                } catch (Exception e) {
                    log.error("getExtendedKeyCodeForChar Incompatible:: {}", c);
                }
            }
        }
    }

    /**
     * 复制
     */
    public static void copy() {
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_C);
        robot.delay(getRandom());
        robot.keyRelease(KeyEvent.VK_C);
        robot.keyRelease(KeyEvent.VK_CONTROL);
    }

    /**
     * 粘贴
     */
    public static void paste() {
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.delay(getRandom());
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
    }

    /**
     * 全选
     */
    public static void electionAll() {
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_A);
        robot.delay(getRandom());
        robot.keyRelease(KeyEvent.VK_A);
        robot.keyRelease(KeyEvent.VK_CONTROL);
    }

}
发布了49 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42920045/article/details/103366766
AWT