Java之Jacob调用COM接口DLL-----------------------------------dm。dll
用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的更多相关文章
- java通过url调用远程接口返回json数据
java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...
- Java之HttpClient调用WebService接口发送短信源码实战
摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...
- Java 通过 jacob调用OCX控件
安装好要调用的ocx驱动,并通过注册表查询其对应的clsid. 下载jacob-1.18解压,将jacob-1.18-x86.dll文件复制到D:\Program Files (x86)\Java\j ...
- 长链接生成短链接Java源码(调用百度接口)
public static DefaultHttpClient httpclient; static { httpclient = new DefaultHttpClient(); //httpcli ...
- JNI之JAVA调用C++接口
1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为ja ...
- java调用C/C++写的dll(转)
源:java调用C/C++写的dll Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C++写好的DLL ...
- Java通过JNI调用dll详细过程(转)
源:Java通过JNI调用dll详细过程 最近项目有这样一个需求,在已有的CS软件中添加一个链接,将当前登录用户的用户名加密后放在url地址中,在BS的login方法里通过解密判断,如果为合法用户则无 ...
- java 利用jna调用c#的dll
一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...
- 【开发者笔记】java 利用jna调用c#的dll
一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...
随机推荐
- SQLSERVER case when 的学习
sqlserver 查询时的CASE WHEN学习记录 ) as '任务数', RPATask_State as id, case RPATask_State when then '已接收' when ...
- cerr与cout的区别
1.cout经过缓冲后输出,默认情况下是显示器.可以重定向. 2.cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,不可以被重定向.
- webstrom 安装Babel
https://www.jianshu.com/p/b9bd2ec9ec80 https://www.cnblogs.com/zhishaofei/p/6061568.html https://blo ...
- 美化centos7
在美化前,我们先安装一个扩展源.yum install -y epel-release然后安装字体包yum -y install liberation-mono-fonts 安装gnome-menis ...
- list1与list2求交集的方法总结!
一.有序集合求交集的方法有 a)二重for循环法,时间复杂度O(n*n) b)拉链法,时间复杂度O(n) c)水平分桶,多线程并行 d)bitmap,大大提高运算并行度,时间复杂度O(n) e)跳表, ...
- BZOJ4650 NOI2016优秀的拆分(后缀数组)
显然只要求出以每个位置开始的AA串数量就可以了,将其和反串同位置的结果乘一下,加起来就是答案.考虑对每种长度的字符串计数.若当前考虑的A串长度为x,我们每隔x个字符设一个关键点,求出相邻两关键点的后缀 ...
- Trailing Zeroes (III) LightOJ - 1138(二分)
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...
- Harmonic Number LightOJ - 1234 (分段打表)
题意: 求调和级数,但n很大啦.. 解析: 分段打表 每间隔50存储一个数,在计算时 只需要找到离输入的n最近的那个数 以它为起点 开始计算即可 emm...补充一下调和级数的运算公式 r为常 ...
- Codeforces Round #487 (Div. 2) E. A Trance of Nightfall (矩阵优化)
题意 有一个平面 , 给你 \(n\) 个点构成一个点集 \(S\) , 一开始可以选择一个平面上任意点 \(P\) . 存在一种操作 : 1 选择一条至少 通过 \(S\) 中任意两个点以及 \(P ...
- 【Luogu4512】多项式除法(FFT)
题面 洛谷 题解 模板题... 我直接蒯我写的东西... 这个除法是带余除法,所以并不能直接求逆解决. 要求的就是给定两个多项式\(A(x),B(x)\),其项数为\(n,m\) 求解一个\(n-m\ ...