游戏外挂开发系列–游戏喊话器
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
from http://blog.csdn.net/sandyandy/article/details/1917074
前言
无疑,伴随着现在的游戏市场日益膨胀的同时,带来了很多与游戏相关的商业活动,游戏中的交易带来了无限的商机和巨额的利润,而如何在游戏中进行产品和业务的推广,是十分重要的。前段时间,鉴于朋友的摆脱,帮忙开发了一个游戏中喊话器,其中涉及一些技术要点,现在总结如下
1. 一些在动手开发前要说的
游戏喊话,初级的实现是借助键盘模拟,高级的实现是借助键盘驱动的模拟,但是这些模拟都会有个缺点:不能同是在多个游戏中喊话,也不能在后台喊话,因此这种模拟技术不是完美的(这是由windows原理决定的)。游戏的外挂开发大多是跨进程,普通的方法是注入(我的喊话程序的第一个版本就是基于注入的),更高级点实现是想办法将要跨进程的操作转化为不要跨进程(我的喊话程序的第二个版本就是基于这种思想的),下面逐个讲解下其中的技术要点。
2. 如何获取游戏的窗口?
HWND WindowFromPoint(
POINT Point // point
);
利用这个函数能够拾取游戏的窗口
3.如何获取窗口的线程?
DWORD GetWindowThreadProcessId(
HWND hWnd, // handle to window
LPDWORD lpdwProcessId // process identifier
);
利用这个函数能够获取游戏窗口的线程ID
4.如何获取游戏窗口线程的局部状态?
BOOL AttachThreadInput(
DWORD idAttach, // thread to attach
DWORD idAttachTo, // thread to attach to
BOOL fAttach // attach or detach
);
利用这个函数能够绑定游戏窗口线程的局部状态,到此,你就不用跨进程去操作游戏窗口了
4.接下来应该怎么办?
HWND SetFocus(
HWND hWnd // handle to window
);
为什么要进行这个调用?因为wm_keydown,wm_keyup是发送给线程中具有焦点的窗口,因此需要对游戏的窗口进行焦点的设置
5.如何在游戏窗口上喊话?
BOOL PostMessage(
HWND hWnd, // handle to destination window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
这里就将要喊话的内容以wm_keydown,wm_keyup发送到游戏窗口上了
6. 补充的东西
以这种方法能够在后台同时在多个游戏中喊话,与键盘模拟的实现来相比起来,出色多了,但是在某些游戏中会出现喊话的内容重叠的时候,如果哪位大虾能指点一二,感激不尽。
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=179