java免注册调用大漠插件

更新:2021年2月26日11:02

更名为javaelf,完善了文档和上手教程,解决了多线程下一些bug,访问地址 javaelf.cn ,建议用那边的东西,这边的不会再维护。

请不要再使用这边的例子了,包括下载文件都是之前旧版本的。

更新:2020年11月13日16:47

1 实际开发过程中会涉及到多线程+多窗口的绑定模式,这个时候就需要多个dm对象,才能绑定成功,所以我对部分方法进行了改动,具体需要注意的是对于反射调用的方法javaScript.execute(),这里重载了方法使其多了一个参数,即javaScrip对象,因为在多线程中要保证绑定窗口和执行方法使用的是同一对象,如果你是单线程或者不需要绑定多个窗口,还是可以不用传递javaScrip对象。
2 JavaScript类获取脚本执行对象新增非静态的获取对象方式,同样是为了在多线程环境下减少对象混淆使用的干扰。

1 需要用到的文件

下载链接 : https://pan.baidu.com/s/18mfkrVE3ErZdVe2w19XQuQ 提取码: 139n
1

JavaScript_build.jar:封装的sdk,基本上满足使用。
dm.rar:里面包含3.1(不收费)和7.2(官网最新),7.2和3.1的区别蛮大的,更加好用,而且现在大漠不收费注册大部分功能是无法使用的。
jawin:国外开源的插件,操作dll的
jdk:32位 1.8,不能用64位。
apidocs:里面有一些说明,不过大部分情况下应该用不上,看大漠接口文档就行。

2 快速开始

新建一个Java项目,结构参考图:

在这里插入图片描述
把如图的两个jar,Add as Library。

编写测试类

public static void main(String[] args)  {
		//dm.dll
        String dmPath = "C:\\Users\\sun\\Downloads\\Compressed\\dm7.2\\dm.dll";
        //DmReg.dll 免注册的关键文件,不是Reg.dll,看清楚。
        String regPath = "C:\\Users\\sun\\Downloads\\Compressed\\DmReg.dll";
        //程序初始化必须运行,否则会提示no jawin in lirary path
        Hole.setLibPath();
        //获取一个js执行对象
        JavaScript js = JavaScript.getJS(regPath,dmPath);
        System.out.println("start CaptureGif");
        //定义参数
        Object[] params = new Object[]{0,0,1920,1080,"C:\\Users\\sun\\Desktop\\1.gif",100,3000};
        //执行并获取结果
        int result = Integer.parseInt(js.execute(Picture.class, PictureOperations.CaptureGif,params).toString());
        if (result == 1)
            System.out.println("success");
        else
            System.out.println("failed");
    }

有小伙伴把文件搞错了,免注册文件是DmReg.dll ,不是Reg.dll,看清楚。
上述代码展示了抓取指定区域(0, 0,1920, 1080)的动画3s,保存为gif格式在桌面。当然,功能是正常并且有效果的

在这里插入图片描述

为了大家能更方便明白其中的代码执行意义,我们来逐行理解

1 JavaScript js = JavaScript.getJS(regPath,dmPath);
在封装的代码中,所有的方法都是通过JavaScript 对象来执行,它通过getJS来初始化获取对象,参数regPath是免注册文件路径,dmPath是大漠插件路径。通过这个方法,系统会完成注册大漠,并返创建大漠对象两个操作。


2 Object[] params = new Object[]{0,0,1920,1080,“1.gif”,100,3000};
调用所有的方法,不论其是否有参数,都要声明一个Object数组。然后把这个数组传给excute。如果本身是没有参数的方法,可以直接把params声明成null,否则,参数要按照顺序排列,请看大漠文档,params数组的7个值对应7个参数。
在这里插入图片描述
或者看apidoc,找到PictureOperations
在这里插入图片描述


3 int result = Integer.parseInt(js.execute(Picture.class,PictureOperations.CaptureGif,params).toString());
这里有两个操作,一个是执行命令,一个是接收返回值。
执行命令:全都是使用获取到的js对象,调用excute方法,该方法有三个参数,第一个是方法所在类,第二个是方法名称,第三个是参数数组(对应上面Object数组);那么如何确定前两个参数呢?
查看apidoc在这里插入图片描述
如上图,分别是后台,文件,键盘,鼠标,ocr,图色,窗口,有些有对应的test,可以去看看,有些是空类,不必在意。回到上面(js.execute(Picture.class,PictureOperations.CaptureGif,params).toString()),就是调用了图色类的CaptureGif方法。而接收返回值则需要你时刻看看文档,对于返回的类型严格把控接收,就不会有问题了。

3需要注意的地方

对有某些方法可能是特殊的理解方式,这有点区别于平时的java开发。

1 对于会有return的方法

话不多说,看代码。

public static void main(String[] args)  {
        String dmPath = "C:\\Users\\sun\\Downloads\\Compressed\\dm7.2\\dm.dll";
        String regPath = "C:\\Users\\sun\\Downloads\\Compressed\\DmReg.dll";
        Hole.setLibPath();
        JavaScript js = JavaScript.getJS(regPath,dmPath);
        System.out.println("start GetCursorPos");
        Object[] params = new Object[]{0,0};
        int result = Integer.parseInt(js.execute(Mouse.class, MouseOperations.GetCursorPos,params).toString());
        if (result == 1)
            System.out.println("success"+"x:"+params[0]+"y:"+params[1]);
        else
            System.out.println("failed");
    }

其他的不看,文档-变参指针
在这里插入图片描述
可以看到这个方法返回的是0或者1,那么我们如果要获取x和y就只能用ref专递。也就是把new Object[]{0,0};传递过去,他把数组的两个元素变成我们想要的。

2 有很多方法是需要收费注册大漠的

比如7.2的大漠。如果你调用BindWindow
在这里插入图片描述
这种就说明你需要注册大漠的收费功能

在这里插入图片描述
在这里插入图片描述
再执行就不会有错了,注册码相关的与我无关,请理性选择用或者不用。
在JavaScript内有一些会用到的方法,可以去看看
在这里插入图片描述
另外,idea需要以管理员方式运行
在这里插入图片描述
千万要注意的是,3.1的免费版本比7.2的收费版本功能少,封装是基于7.2,如果你注册3.1去调用不存在的方法会报错的。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值