Java调用WinIO

项目需要对安全控件进行写入,之前第一想法就是用windows自带的user32.dll接口写入,该dll中有个神器方法key_event,可以对安全控件写入,但后来发现,有些安全控件的写入就不成功,由于之前没有这方面的经验,这个问题就放下了,一直没有处理。
最近无意中在网上看到winIO输入,于是又重新对安全控件进行研究,过程中也遇到一堵堵墙,还好是解决问题了。
winIO也是提供对window下的驱动级输入控件,有一套dll文件接口。java要对dll进行读写,就必须先导入dll。然后才能调用。在此我还用到了jNative.jar。jnative提供了一套简单的对dll进行访问的接口,使得对调用dll变的很方便。如:
JNative jnative = new JNative("WinIo32","InitializeWinIo");
在构造一个JNative对象指明调用WinIo32.dll中的InitialLizeWinIo方法,接着设置jNative调用该方法需要传入的参数类型和参数值,最后调用invoke后就可以拿到返回结果。
winIo在调用之前需要先载入dll,然后进行初始化,之前在进行初始化的时候总是不成功,绕了很多弯路,原来dll文件必须放到java的bin目录下,放在工程下是调用不成功的,切记。

然后还有一些需要注意的就是,windows分32位和64位,winIO针对这个问题,也提供了32和64位的dll。不过我试了下,在64位的win7下也不是直接调用的winIo64,好像是通过winIo32再调用winIO64的,当时做了一些实验,我删除掉winIo32,调用就不能成功,必须同时把winIO32和winIO64放一起才能成功。当然这是什么原理,我不清楚。还有一个坑,64位windows下,dll必须签名,否则调用也不能成功,从提示信息可以看出来,大概意思是该dll没有签名,调用不安全之类的,当然我们没有签名也是可以调用的,我们只要开启windows测试模式,然后引入签名文件即可,当然这些做完之后要重启,否则不生效,之前不知道,使得我被这个问题也是折磨了很久(具体过程不详述了)。附件提供了dll相关文件(所有需要的文件都在里面了)
到此为止,世界终于清静了。。。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值