本帖最后由 张益达 于 2014-7-2 15:10 编辑
上次益达发了一个删除地下城补丁的IO流之后 。现在益达需要连发了 ,所以老规矩 自己动手 丰衣足食 。用别人的不放心 (万一贼人下毒呢。)
什么是连发呢 就是 每当你按下攻击键以后 你按住不放 程序会一直调用攻击键 ,除了省事 还有就是心理爽 = = 。
不说废话 现在开始
思路是 让系统在键盘按下X的时候就开始捕捉,捕捉到以后 在抬起之前一调用攻击键(益达在游戏中的攻击键是X)但是这有个前提 是要求在任何窗口下,要兼容所有的游戏嘛而且每个人 没个游戏的攻击键很有可能会不一样的伐。因为是全局的所以是没有办法用键盘事件绑定的 绑定的时间一旦没有激活窗口就会失去作用 但是如果要是激活着窗口 那游戏怎么办 擦 = = 。 这就涉及到一个键盘钩子的概念 对于钩子不懂的童鞋自行百度 每一种系统 调用一个输入按键的方式并不一样 所以 要配合examples.jar和JNI jar包已经打好 随后会放在附近里 大家自行下载查阅= = 。因为主要是为了激发大家的兴趣 就仅仅解释关键的连发实现要点了= = 。
首先要做到 使用程序的人在任何时候 及时同时开着一百个程序也能在按下X的时候 调用自己写的代码
代码如下
- KBHook keyboy = KBHook.getInstance();
- keyboy.addKBListener(new KeyBoardListener() {
- public void acceptEvent(KBEvent e) {
- System.out.println(e.keyCode == KeyEvent.VK_X);
- }
- });
- keyboy.install();
复制代码 怎么 代码很简单吧 这段代码 是实现是否X被按下的关键奥= =。只要程序开着 每当按下之后 都会捕捉当前按下的ascii码 x的是88 让按下之后在让他模拟攻击键去不停的猛击 抬起则停下 就要将System.out.println(e.keyCode == KeyEvent.VK_X);改为如下- public void acceptEvent(KBEvent e) {
- if(e.keyCode == KeyEvent.VK_X){
- if(e.state == KeyEvent.VK_ALL_CANDIDATES){
- //按下状态以后要不停的猛击
- DownX.type(KeyEvent.VK_X);
- }
- if(e.state == KeyEvent.VK_PREVIOUS_CANDIDATE){
- //抬起状态则不在猛击
- DownX.release(KeyEvent.VK_X);
- }
- }
- System.out.println(e.keyCode == KeyEvent.VK_X);
- }
复制代码
嗯 来一张图 以示清白
代码附上 大家请多多指教 技术分已经凑够数了 还是要点黑币吧 还望版主加精= = ..
|
|