游戏外挂开发系列--游戏喊话器
2007-12-04 21:40
513 查看
前言
无疑,伴随着现在的游戏市场日益膨胀的同时,带来了很多与游戏相关的商业活动,游戏中的交易带来了无限的商机和巨额的利润,而如何在游戏中进行产品和业务的推广,是十分重要的。前段时间,鉴于朋友的摆脱,帮忙开发了一个游戏中喊话器,其中涉及一些技术要点,现在总结如下
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. 补充的东西
以这种方法能够在后台同时在多个游戏中喊话,与键盘模拟的实现来相比起来,出色多了,但是在某些游戏中会出现喊话的内容重叠的时候,如果哪位大虾能指点一二,感激不尽。
无疑,伴随着现在的游戏市场日益膨胀的同时,带来了很多与游戏相关的商业活动,游戏中的交易带来了无限的商机和巨额的利润,而如何在游戏中进行产品和业务的推广,是十分重要的。前段时间,鉴于朋友的摆脱,帮忙开发了一个游戏中喊话器,其中涉及一些技术要点,现在总结如下
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. 补充的东西
以这种方法能够在后台同时在多个游戏中喊话,与键盘模拟的实现来相比起来,出色多了,但是在某些游戏中会出现喊话的内容重叠的时候,如果哪位大虾能指点一二,感激不尽。
相关文章推荐
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
- cocos2d-x游戏开发系列教程-中国象棋04-摆棋
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)向Silverlight移植①
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十)向Silverlight移植②
- unity3D游戏开发实战原创视频讲座系列11之相扑游戏开发并发布到Win\WP8
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十五)地图编辑器的初步使用
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示
- Pomelo游戏服务器端开发系列(2)-pushMessage
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十六)地图自定义切片与导出
- Pomelo游戏服务器端开发系列(3)-Router
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十二) 雷、混、冰、毒、火、风 - 幻化中的魔法魅力!
- 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习 )
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写中
- Android游戏开发系列教程第六讲(菜单对话框)
- cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写
- C#开发WPF/Silverlight动画及游戏系列教程(转)
- Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
- Android游戏开发系列教程第一讲(游戏中的Handler)
- cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene