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”);

}

}

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

使用腾讯微博登陆

Protected by WP Anti Spam
   
© 2011 Information Retrieval Blog Suffusion theme by Sayontan Sinha