Java中实现模拟鼠标点击
Robot类介绍
Java SDK 1.3以后实现了Robot类。
该类用于产生本地系统的输入事件,用于自动化测试、自运行demos已经其它需要控制鼠标和键盘的应用。Robot类最主要作用就是让java平台上能实现自动测试。
使用Robot类产生输入事件跟记录事件到AWT组件不同的是Robot类产生的事件产生到操作平台的本地输入队列。
需要注意的是有些平台需要特殊的权限才能就行底层的输入控制,所以如果没有权限会产生异常。
Robot中主要的鼠标和键盘控制方法有:
- void keyPress(int keycode) 按下给定的键。
- void keyRelease(int keycode) 释放给定的键。
- void mouseMove(int x, int y) 将鼠标指针移动到给定屏幕坐标。
- void mousePress(int buttons) 按下一个或多个鼠标按钮。
- void mouseRelease(int buttons) 释放一个或多个鼠标按钮。
- void mouseWheel(int wheelAmt) 在配有滚轮的鼠标上旋转滚轮。
下面就让我们来实战鼠标控制,实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠标并点击左键。
代码如下:
package test;
/**
*
* @author yezheng
*
*/
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.util.Random;
class MouseController implements Runnable {
private Dimension dim;
private Robot robot;
private volatile boolean stop = false;
/** Creates a new instance of Main */
public MouseController() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println(“screenHeight:”+dim.height);
System.out.println(“screenWith:”+dim.width);
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
int i= 0;
int x,y;
long sleepTime =200;
while (i++<1000) {
x=70;
y=120;
System.out.println(“conX:” + x);
System.out.println(“conX:” + y);
///移动鼠标
robot.mouseMove(x, y);
sleep(sleepTime);
/////////////////双击//////////////////////////
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mousePress(InputEvent.BUTTON1_MASK);
/////////////////////////////////////////////
x= 240;
y= 60;
robot.mouseMove(x, y);
sleep(sleepTime);
/////////////////单击//////////////////////////
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
/////////////////////////////////////////////
sleep(sleepTime);
//追加
x= 700;
y= 318;
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
sleep(sleepTime);
//录入
x= 700;
y= 355;
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
sleep(sleepTime);
//确认录入
x= 520;
y= 388;
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
sleep(sleepTime);
//追加
x= 980;
y= 300;
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
sleep(sleepTime);
//下拉一个词
x=901;
y=690;
System.out.println(“conX:” + x);
System.out.println(“conX:” + y);
robot.mouseMove(x, y);
// robot.mouseWheel(1);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
// robot.mousePress(InputEvent.BUTTON1_MASK);
sleep(sleepTime);
// System.exit(1);
}
}
public synchronized void stop() {
stop = true;
}
public synchronized static void sleep(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* *
*
* @param args
* the command line arguments
*/
public static void main(String[] args) {
MouseController mc = new MouseController();
Thread mcThread = new Thread(mc);
System.out.println(“Mouse Controller start”);
mcThread.start();
try {
Thread.sleep(60000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
mc.stop();
System.out.println(“Mouse Controller stoped”);
}
}