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) | 旋转鼠标滚轮 |
我们对其中主要的方法进行试验:
- 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"));`//保存截图
- 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
- 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;
}
- mousePress(int buttons),mouseRelease(int buttons):按下或释放鼠标键位
Robot robot = new Robot();
robot.mousePress(KeyEvent.BUTTON1_MASK); //鼠标左键按下
robot.mouseRelease(KeyEvent.BUTTON1_MASK);//鼠标左键抬起
- 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 | 鼠标右键 |