前言
全局监控就是在离开程序的焦点以后键盘的监听依旧有效,可以用来做一些有意思的东西,比如一键完成一系列的操作。
这几天研究一些有意思的东西,发现Java在很多地方的使用真的是很有局限性,各个地方都是调用的.dll来完成,比如一些获取句柄使用User32(还遇见了同样用User32但是Python可以获取到句柄而Java获取不到)、驱动级键盘模拟使用WINIO等等。
JIntellitype使用
这次的全局键盘监控主要使用JIntellitype来完成,方式也很简单
这里直接给出jar和dll的下载链接:
http://dd.jb51.net:81/201409/tools/jintellitype-1.3.9-dist(jb51.net).rar
碰到的问题
对于com.melloware.jintellitype目录下存放.dll文件的问题,这里我碰到一个坑点。
首先要获取到JIntellitype的实例,它的构造器如下。
理论上载入dll文件是可以把dll放在classpath路径或者直接放在jdk的bin下,双亲委派模型都是会去优先加载的,而教程中是直接在当前目录下新建了一个com.melloware.jintellitype包来存放,这在代码里明确写死了加载目录应该也是可行的,但是我两种方法都尝试过后依旧是载入失败报如图所示异常。
最后发现是idea并没有对我存放的目录进行编译,于是我直接在编译后的目录里存放了dll文件
如下:
后记
全局监控注册一下按键,并在监听中根据注册的第一个参数进行匹配然后执行方法即可,配合上WINIO和USER32可以进行一些游戏脚本的简单制作这里就不多说了,这里只是有点兴趣所以简单的研究了一下。
java调用本地方法的方式可以完成很多java局限性的功能,包括程序与C语言的对接也需要jna来实现,了解一些jna的使用方式还是很有必要的。
112是F1/113是F2 理论上应该用VK_F1和VK_F2,但是这个常量是哪个接口里存的实在没找到…