用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下。

一、环境介绍

1、myeclipse8.5

2、著名按键插件dm。dll  32bit。此插件实现COM接口,百度百科说是vc6.0编的。

PS:真™坑爹,害我跑去研究jna了。个人觉得是vb编的。

3、jdk1.8 32位。一定要32位,因为免费dm。dll也是32位。

4、jacob.jar     jacob-1.18-x86.dll

5、win7 64bit

ps:myeclipse8.5版本低了,不支持jdk1.8,连String.contains()都用不了。

所以我试了另一种搭配jdk1.6+jacob1.9可行

二、jacob与jna对比

jacob用来调用实现COM接口的dll。根据分析jacob提供的类,发现com.jacob.com.Dispatch有invoke方法。可以猜到使用java反射机制的方式调用dll。那么你只要dll的api,以传入类名、方法名、参数方式就可以调用dll。

jna一般用来调用vc编dll。jna要求java和vc必须实现相应的接口。

蛋疼啊,在dll没有实现接口,java这边实现也不顶用。

要是有100个方法就要声明100遍,要是有一万个呢。

所以说,就方式而言,明显jacob更胜一筹。

三、开干

1、注册dm。dll

以管理员运行dos,输入一下。ps:一定要以管理员运行。快捷键不行的。

regsvr32 "C:\xxxxxx\dmPluginRegister\dm点dll"   。。。替换掉汉字。路径填你自己的。

2、eclipse中新建一个java工程

引入jacob.jar

3、jacob-1.18-x86.dll放入path

加入运行环境也行,我是将jacob-1.18-x86.dll拷入入java的bin目录

4、哎呀实验了好多次才成功的怎么几句话就完了。。。

好吧,来讲解一下代码吧

只是个测试类,新建并打开newFile.txt。运行代码

public class DmDllTest {
public void changeWindowTitleTest() { try {
//初始化
ComThread.InitSTA(); /*
* 调用dm.dmsoft
* only in the sense that it is used for creating Dispatch objects
*/
ActiveXComponent axc = new ActiveXComponent("dm.dmsoft");
//get MS level dispatch object
Dispatch myCom = (Dispatch) axc.getObject(); //查找到名为newFile.txt的句柄
Variant result = Dispatch.call(myCom, "FindWindow" , "" , "newFile.txt"); //改变窗口title
Dispatch.call(myCom, "SetWindowText" , result , "newFileChange.txt"); //释放资源
ComThread.Release();
} catch (Exception e) { e.printStackTrace(); } }     public static void main(String[] args) {
        new DmDllTest().changeWindowTitleTest();
    } }

可以发现窗口标题变成 newFileChange.txt

dm.dmsoft参数,因为刚才注册dll到系统了,所以系统知道。那么在vb(vc)项目中,dm是工程名,dmsoft是类名。

ps:这个参数一直搞不懂,网上也找不到一片像样汉语教程(全是不带注释的操作excel、word之类),后来找到老外的一片文章,才搞懂含义。

Dispatch myCom = (Dispatch) axc.getObject();

呵呵,这样我们就获取了dll的资源了,只需要再call一下方法,第二个参数是方法名(方法名可以通过dll的api获得),后面的为参数,可以按要求传无限个。

通过查阅api,可以发现按键、内存都不在话下。

。。。没什么要讲的了,其实老鸟一看代码就懂了。

---------------------
作者:止聒
来源:CSDN
原文:https://blog.csdn.net/cb44606/article/details/50060185?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

Java之Jacob调用COM接口DLL-----------------------------------dm。dll的更多相关文章

  1. java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  2. Java之HttpClient调用WebService接口发送短信源码实战

    摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...

  3. Java 通过 jacob调用OCX控件

    安装好要调用的ocx驱动,并通过注册表查询其对应的clsid. 下载jacob-1.18解压,将jacob-1.18-x86.dll文件复制到D:\Program Files (x86)\Java\j ...

  4. 长链接生成短链接Java源码(调用百度接口)

    public static DefaultHttpClient httpclient; static { httpclient = new DefaultHttpClient(); //httpcli ...

  5. JNI之JAVA调用C++接口

    1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为ja ...

  6. java调用C/C++写的dll(转)

    源:java调用C/C++写的dll Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C++写好的DLL ...

  7. Java通过JNI调用dll详细过程(转)

    源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...

  8. java 利用jna调用c#的dll

    一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...

  9. 【开发者笔记】java 利用jna调用c#的dll

    一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...

随机推荐

  1. [转载] 虚拟机下面安装windows+oracle ASM的过程

    转帖:https://www.2cto.com/database/201303/195261.html 最开始的时候 我找了一个挺好的教程 安装过 但是已经找不到了,先转载一下这个内容,后续再测试完善 ...

  2. Qt_深入了解信号槽(signal&slot)

    转自豆子空间 信号槽机制是Qt编程的基础.通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯.这就将类之间的关系做了最大程度的解耦. 槽函数和普通的C++成员函数没有很大的区别.它们也可以使 ...

  3. matplotlib绘图

    fig = plt.figure() ax=plt.gca() timeList = np.array(timeList) timeList=timeList*100 timeList1 = np.a ...

  4. flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)

    这篇主要介绍在这次项目中使用的peewee 文档地址:http://peewee.readthedocs.org/en/latest/index.html 首先我们要初始化一个数据库连接对象.这里我使 ...

  5. ItemsControl的两种数据绑定方式

    最近在学习ItemsControl这个控件的时候,查看了MSDN上面的一个例子,并且自己做了一些修改,这里主要使用了两种方式来进行相应的数据绑定,一种是使用DataContext,另外一种是直接将一个 ...

  6. jquery 祖先、子孫、同級

    jquery向上遍歷,獲取祖先元素 parent()獲取選中元素的父 parents()獲取選中元素的所有的祖先節點,一直到文檔的根元素<html> parentUntil(“元素1”)獲 ...

  7. BZOJ3750[POI2015]Pieczęć——链表

    题目描述 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要满足以下要求: ...

  8. P3201 [HNOI2009]梦幻布丁

    题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...

  9. John's trip POJ - 1041(这题数据有点水)

    题意: 其实还是一个欧拉回路,但要按字典序走路: 解析: 我真是蠢啊emm... map[i][j]表示由顶点i经街道j会到达的顶点编号 然后枚举j就好了 用栈储存.. 虽然我不是这样写的 #incl ...

  10. 【Luogu3803】多项式乘法FFT(FFT)

    题目戳我 一道模板题 自己尝试证明了大部分... 剩下的还是没太证出来... 所以就是一个模板放在这里 以后再来补东西吧.... #include<iostream> #include&l ...