GitHub - dejavud/war3key: War3Key is a hotkey utility for Warcraft III.

GitHub上的程序源代码,别人写的,我只是看代码分析他的实现原理并分享,希望小白能看懂。

首先要了解没有改键的时候,键盘消息是怎样到游戏进程的。当在玩游戏的时候,点击一个键盘按键,会产出一个键盘消息,此键盘消息进入系统消息队列,系统会将此键盘消息派发给当前活动窗口。当前活动窗口是游戏进程的,所以此消息离开系统队列,进入游戏窗口消息队列。游戏自己的消息处理函数会处理各种键盘消息,从而产生相应的动作。比如按w释放某技能,按小键盘1使用相应的物品栏。

上面分享的这个改键程序实现的功能是改物品栏的按键。因为小键盘太远不方便。现在想按z按键,实现按小键盘1的效果。将z和1的键值码放入map容器绑定非常容易实现。当按下z的时候,把这个键盘消息替换为小键盘1,再传递给游戏窗口队列,需求就能实现。

实现的方法不只一种,上面的这个程序的实现是通过注册一个全局键盘钩子,

::SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);

这个全局键盘钩子可以截获系统队列里所有的键盘消息,截获到之后会在自定义的LowLevelKeyboardProc回调函数里进行处理。处理的逻辑是,如果当前活动窗口不是游戏窗口,则进行默认的消息处理,这样消息会被系统派发给当前活动的其它窗口,从而不影响其它进程。如果是war3的窗口,则判断此键盘消息的键值码是否是z的键值码,如果是,则通过代码产生一个虚拟按键事件,如果不是,则也进行默认的消息处理。

::keybd_event(destKey, scanCode, 0, 0);
::keybd_event(destKey, scanCode, KEYEVENTF_KEYUP, 0);

destKey为小键盘1的键值码。而按z产生的键盘消息则丢弃,不让它被派发给游戏进程。虚拟键盘事件也同按了键盘一样,会在系统消息队列产生新的小键盘1的键盘消息,然后此消息又会被全局钩子捕获到,但它此时不是z了,默认不处理派发给游戏窗口。至此,本来按z产生的键盘消息,变成了按1产生的键盘消息,被放入游戏窗口队列,被游戏窗口的消息处理函数处理,从而实现了改键。

以上是改键原理的核心点,其它细节感兴趣可自行研究。

魔兽争霸3游戏改键原理相关推荐

  1. 游戏按键改键功能的使用

    在这一章节中我们将来用一个实例来介绍一下游戏中修改键盘热键的操作 比如说下面的这款游戏是非常好玩的 但是这款游戏设计的有点不太人性化的地方是这个游戏的键盘的按键是无法直接修改的,所以我们的程序便派上了 ...

  2. 扯一下关于魔兽改键的蛋

    五一放了几天,难得不用呆在实验室,于是就去了趟将来工作的城市,四处走了走,感觉还不错,但这只会让我心中更加纠结,唉! 算了,不说废话了,有半个月没写博客了,其实也不是没东西可写,反而是要写的太多了,不 ...

  3. 魔兽争霸键盘改键+显血工具的实现(v1.0.1.1)

    成品地址: v1.0.1.1: http://files.cnblogs.com/Vontio/War3Helper1.0.1.1.rar v1.0.0.0: http://files.cnblogs ...

  4. java游戏健值测试软件,教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏.doc

    教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏 作者:admin????教程来源:百科原创????点击数: 6688????更新时间:2009-6-4 JavaMagic是一款为解决手 ...

  5. java游戏修改文件_教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏

    教你使用JavaMagic来改JAVA手机游戏软件键值和改全屏 作者:admin教程来源:百科原创点击数:6688 更新时间:2009-6-4 JavaMagic是一款为解决手机Java游戏某些兼容性 ...

  6. 用C#钩子写一个改键外挂

    我的微信群--软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候.理论上玩儿什么游戏都可以改键. 做一个窗体(点击Install--应用改键,点击Uninstal ...

  7. 键盘改键软件_一秒五键,一键三招,万种光污染,杜伽K310樱桃轴机械键盘感受...

    机械键盘我一直用的青轴,或者各种其他名字但其实本质就是青轴的.喜欢青轴那种清脆的声音,在我听来如同山间小溪流水般的叮咚.不过这声音在夜间分外的具有穿透力,更会在人身体不好的时候难以承受,所以每每用过之 ...

  8. 笑傲江湖客户端服务器地址修改,《笑傲江湖》改键调整操作手把手教你玩笑傲...

    <笑傲江湖>采用全新引擎AngelicaIII打造,秉承原著武侠精髓,首推新派动作武侠网游概念--融入动作及格斗游戏要素,强调真实的打击感与流畅的动作连贯度,并运用方向判定.位移闪避.移动 ...

  9. 魔兽重置版改键+喊话

    魔兽重置版改键+喊话 原创软件,绝无广告 附代码 **长总求:自己写的改键+喊话软件 ** 最近在玩魔兽争霸3重置版 别的不评价了,没有改键功能非常麻烦,自己做了一个. 好坏就不评论了,就当给当年补票 ...

最新文章

  1. 使用RSA私钥或pfx私钥签名String
  2. Kafka: Connect
  3. 对AD资料复制的理解
  4. Regex解析字符串
  5. 开发步骤 采用restful接口开发的开发步骤
  6. python 学习DAY11
  7. 北航数值分析大作业_北航非全日制研究生学习全纪实(2020.9.27)——一周上课感受...
  8. java并发:interrupt进程终止
  9. Nginx + uWSGI + Flask + Vhost
  10. 阿里云思维导图系列(一)开篇
  11. 磁盘阵列卡组建磁盘阵列
  12. python编程入门到实践第二章_《Python编程:从入门到实践》第二章 变量和简单数据类型 习题答案...
  13. 云计算:吹尽狂沙始到金
  14. win7下安装Ubuntu16.04双系统
  15. 使用windows命令行 启动WeGame
  16. Unity实用案例之——动画压缩
  17. MIT牛人解说数学体系
  18. Web前端 HTML Day_01
  19. PHP数组去重/高德地图API
  20. 人类对人工智能的看法有哪些

热门文章

  1. 蓝懿iOS 技术内容和心得 12.6
  2. 2021年下半年软件设计师下午真题答案及解析(二)
  3. 综述科普:单细胞测序技术下的小鼠脑部DNA甲基化图谱
  4. 北漂(三)(转):北京这个地方
  5. routeDone with a webviewId 7 that is not the current page
  6. 斧子的HTML5输出是什么,CF斧有什么使用技巧 斧子使用经验分享【详解】
  7. ip linux 用户名和密码,日常路由器登陆IP地址以及用户名与密码
  8. 2018双11数据大屏设计:数据经济时代的全球清明上河图
  9. 最励志语句!——冲向阿里,反正光脚的不怕穿鞋的
  10. call、apply 以及 bind 的区别和用法