java.awt.Robot类的使用

Robot类是java比较有趣的类,主要是来控制鼠标与键盘的操作,API的描述如下:

此类用于生成本机系统输入事件,用于测试自动化,自动运行演示和需要鼠标和键盘控制的其他应用程序。
Robot的主要目的是为了方便Java平台实现的自动化测试。
使用类生成输入事件不同于将事件发布到AWT事件队列或AWT组件,因为事件在平台的本机输入队列中生成。 例如,
Robot.mouseMove实际上将移动鼠标光标,而不是仅生成鼠标移动事件

主要的方法

方法

描述

返回

createScreenCapture(Rectangle screenRect)

创建包含从屏幕读取的像素的图像

BufferedImage

delay(int ms)

睡眠指定时间

keyPress(int keycode)

按下给定的键

keyRelease(int keycode)

释放给定的键

mouseMove(int x, int y)

将鼠标指针移动到给定的屏幕坐标

mousePress(int buttons)

按一个或多个鼠标按钮

mouseRelease(int buttons)

释放一个或多个鼠标按钮

mouseWheel(int wheelAmt)

旋转鼠标滚轮

我们对其中主要的方法进行试验:

  1. createScreenCapture(Rectangle screenRect) :创建包含从屏幕读取的像素的图像。 此图像不包括鼠标光标。可以利用此方法编写一个截图工具
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();  //获取当前屏幕尺寸
        Rectangle rectangle = new Rectangle(screenSize);	
        BufferedImage screenCapture = new Robot().createScreenCapture(rectangle);
        ImageIO.write(screenCapture,"png",new File("./screenShot.png"));`//保存截图
  1. keyPress(int keycode), keyRelease(int keycode): 按下或松开一个指定的键,直接看示例
Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_A);  //按下键盘A
        robot.keyRelease(KeyEvent.VK_A);//松开键盘A

要注意,此方法只是模拟键盘输入,所以小写的情况下,要输入大写的A,应该再控制按下shift或者大小写切换键

Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_SHIFT); //按下shift
        robot.keyPress(KeyEvent.VK_A);
        robot.keyRelease(KeyEvent.VK_A);
        robot.keyRelease(KeyEvent.VK_SHIFT);//松开shift
  1. mouseMove(int x, int y):移动鼠标光标到指定位置
//控制鼠标在屏幕指定位置画圆圈
		Robot robot = new Robot();
		double r = 300d;   //半径
        double x = 600d,y = 600d;  //画圆位置
        double start = 0d;   //每次移动改变的角度
        while (true){
            robot.mouseMove((int)(r*Math.cos(start)+x),(int)(r*Math.sin(start)+y));//鼠标移动
            robot.delay(50);//休眠一段时间,减慢画圆的速度,可以更好的观测
            start += 0.1d;  //角度每次增加0.1,保证鼠标平滑的移动
            if(start>100)  //退出条件,防止一直画不停
                break;
        }
  1. mousePress(int buttons),mouseRelease(int buttons):按下或释放鼠标键位
Robot robot = new Robot();
        robot.mousePress(KeyEvent.BUTTON1_MASK);  //鼠标左键按下
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);//鼠标左键抬起
  1. mouseWheel(int wheelAmt):移动鼠标滚轮的“凹口”数量,负值表示向上,正值表示向下
Robot robot = new Robot();
        robot.mouseWheel(-1000);

常用键位与KeyEvent常量对应关系

键位

KeyEvent常量

VK_CONTROL

Ctrl

VK_HOME

Home

VK_ALT

Alt

VK_SHIFT

shift

VK_CAPS_LOCK

大小写锁定

VK_TAB

tab

VK_ESCAPE

Esc

VK_ENTER

回车

VK_END

End

VK_BACK_SPACE

Backspace

VK_LEFT

左箭头

VK_RIGHT

右箭头

VK_UP

上箭头

VK_DOWN

下箭头

VK_F1–VK_F12

F1-F12

VK_0 --VK_9

0-9

VK_A --VK_Z

A-Z

BUTTON1_MASK

鼠标左键

BUTTON3_MASK

鼠标右键