java中的Robot类中自带了模拟鼠标和键盘的相关事件,但是这样的模拟带有一定的局限性,那么如何实现功能更加强大的模拟呢?
IDEA+JDK1.8(64位)+Maven 请以管理员身份运行IDEA,否则程序会运行失败
所需jna依赖(或者相应jar包): maven依赖下载地址
<dependencies> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>4.1.0</version> </dependency> </dependencies>下载DD动态库(需要64位JDK环境): 驱动下载-百度网盘链接 提取码:ijnj
新建maven项目,并将刚才下载的DD动态库拷贝到maven项目的resource目录下: 最后需要将DD动态库导入到项目中: IDEA中:File->Project Structure->Libraries:点击红色标注的加号: 找到刚才下载的DD动态库文件,选中,点击ok,准备工作已完成。
需要为DD驱动准备一个调用接口,代码如下:
import com.sun.jna.Library; import com.sun.jna.Native; public interface DD extends Library { DD INSTANCE = (DD) Native.loadLibrary("DD.64", DD.class); int DD_mov(int x, int y); int DD_movR(int dx, int dy); int DD_btn(int btn); int DD_whl(int whl); int DD_key(int ddcode, int flag); int DD_str(String s); }接下来就可以愉快的玩耍了:
public class Test { public static void main(String[] args) throws InterruptedException { //模拟鼠标移动 并且点击两次window键 DD.INSTANCE.DD_mov(1,1); System.out.println("鼠标移动到(1,1)位置"); TimeUnit.SECONDS.sleep(1);//休眠,非必须 DD.INSTANCE.DD_key(601,1); System.out.println("第一次按下win(601)键"); TimeUnit.SECONDS.sleep(1); DD.INSTANCE.DD_key(601,2); System.out.println("第一次松开win(601)键"); TimeUnit.SECONDS.sleep(1); System.out.println("第二次按下win(601)键"); DD.INSTANCE.DD_key(601,1); TimeUnit.SECONDS.sleep(1); System.out.println("第二次松开win(601)键"); DD.INSTANCE.DD_key(601,2); TimeUnit.SECONDS.sleep(1); } }DD_btn(参数) 功能: 模拟鼠标点击 参数: 1 =左键按下 ,2 =左键放开 4 =右键按下 ,8 =右键放开 16 =中键按下 ,32 =中键放开 64 =4键按下 ,128 =4键放开 256 =5键按下 ,512 =5键放开 例子:模拟鼠标右键 只需要连写(中间可添加延迟) dd_btn(4); dd_btn(8);
DD_mov(参数x,参数y) 功能: 模拟鼠标结对移动 参数: 参数x , 参数y 以屏幕左上角为原点。 例子: 把鼠标移动到分辨率1920*1080 的屏幕正中间, int x = 1920/2 ; int y = 1080/2; DD_mov(x,y) ;
DD_movR(参数dx,参数dy) 功能: 模拟鼠标相对移动 参数: 参数dx , 参数dy 以当前坐标为原点。 例子: 把鼠标向左移动10像素 DD_movR(-10,0) ;
DD_whl(参数) 功能: 模拟鼠标滚轮 参数: 1=前 , 2 = 后 例子: 向前滚一格, DD_whl(1)
DD_key(参数1,参数2) 功能: 模拟键盘按键 参数: 参数1 ,请查看[DD虚拟键盘码表]。 参数2,1=按下,2=放开 例子: 模拟单键WIN, DD_key(601, 1);DD_key(601, 2); 组合键:ctrl+alt+del DD_key(600,1); DD_key(602,1); DD_key(706,1); DD_key(706,2); DD_key(602,2); DD_key(600,2);
DD_str(参数) 功能: 直接输入键盘上可见字符和空格 参数: 字符串, (注意,这个参数不是int32 类型) 例子: DD_str(“MyEmail@aa.bb.cc !@#$”)
Over!
