今天心血来潮,准备写个外挂练练手,当然也是从简单的开始了,就选腾讯连连看下手。

之前整合过2个外部的exe程序,接触了找句柄、读写内存的操作,写游戏外挂找基址是关键,当然离不开CE(不知道CE的直接退下)了。

启动VC6,新建一个简单的基于对话框的工程,捋一捋游戏流程,先写上几个功能函数的空函数,这样的好处是写代码的逻辑跟着游戏流程走,不会乱。先看一下我们都需要什么吧,头文件功能函数如下:

void autoPlay(); //进入游戏后,自动开始游戏
void OnBtnChessdata(); //获取棋盘数据
void dotaReplay(); //被踢重进游戏
BOOL checkDataChange(); //检查棋盘是否发生改变,如果消除未发生改变,则需要使用重排道具
void useProp(); //使用重排道具
bool checkEnd(); //判断当前棋盘是否全部消除
int m_x; //第一个棋子x坐标
int m_y; //第一个棋子y坐标
int m_num; //记录棋盘未消除棋子个数

先把框架写好,一个个的去实现。
首先是开始游戏,获取游戏窗口句柄 -> 移动光标点击开始按钮
开始游戏代码如下,注意相对坐标和绝对坐标。
         
HWND gameH = ::FindWindow(NULL,gameCaption);
if(!gameH)
{
return ;
}
CPoint pOld;
GetCursorPos(&pOld);    //保存移动光标前的鼠标位置
CRect rect;
::GetWindowRect(gameH,&rect);   //获取窗口位置
SetCursorPos(rect.left+m_x,rect.top+m_y); //将相对坐标 转换成屏幕绝对坐标
//移动光标,左键按下、左键抬起
mouse_event(MOUSEEVENTF_LEFTDOWN,rect.left+m_x,rect.top+m_y,NULL,NULL);
mouse_event(MOUSEEVENTF_LEFTUP,rect.left+m_x,rect.top+m_y,NULL,NULL);
//还原光标
SetCursorPos(pOld.x,pOld.y);
游戏开局很轻松实现,那么现在很关键很重要的就是要找整个棋盘的基址,即找左上角第一个棋子的内存位置。
用CE工具不断查找,最终获取到棋盘基址是:0x00129F78  //基址每次游戏更新可能会变,这样外挂辅助要要跟着更新了。
读取棋盘数据功能函数如下:棋盘数据最好声明为全局变量或者对话框类的数据成员
 
//读取棋盘数据
byte chessData[11][19];
/
HWND gameH = ::FindWindow(NULL,gameCaption);
if(!gameH)
{
return ;
}
DWORD processID;
//通过窗口句柄,获取进程ID
::GetWindowThreadProcessId(gameH,&processID);
//通过进程ID,以所有权限打开进程
HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS,false,processID);
LPDWORD realSize = 0;
LPCVOID pbase = (LPCVOID)0x00129F78;   //棋盘基址,即第一个棋子的内存地址
LPVOID buffer = (LPVOID)&chessData;
//从基址开始,读取11*19个字节的数据
::ReadProcessMemory(processH,pbase,buffer,11*19,realSize);
///统计棋盘数据,棋盘大小为19*11
for (int y=0;y<=10;y++)          //行
{
for (int x=0;x<=18;x++)      //列
{
if(chessData[y][x]!=0) //统计棋子数
m_num++;
}
}
成功读取到棋盘所有数据,接下来的流程就是检查棋盘数据,为0的就跳过,数据相同的就移动光标进行模拟点击,每消除一对棋子就重新刷新一次棋盘数据,刷新数据变量m_num 直到棋盘数据数组中所有元素为0,结束循环,游戏结束。
代码就不一段段的帖了,想要代码或者程序的在下面链接下载。
http://download.csdn.net/detail/shortcoder/6566501
棋子消除判断实现不理想,本程序思想是判断2棋子相同,即去模拟点击,并未判断2个棋子间是否可消除。
程序中通过在循环中刷新数据,来避免死循环,能实现游戏的一键秒杀,但会有很短暂的卡屏。
判断2棋子是否可消除算法,请期待下一节。
附:秒杀图片:


MFC学习笔记整理:002_腾讯游戏连连看外挂制作(一)相关推荐

  1. C++ MFC 学习笔记+小型通讯录系统实现

    MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...

  2. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  3. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(八)

     Deep Learning(深度学习)学习笔记整理系列之(八) 分类: Deep Learning 机器学习 Linux驱动2013-04-10 11:4257652人阅读评论(25)收藏举报 ...

  7. Deep Learning(深度学习)学习笔记整理系列三

    Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明 ...

  8. Deep Learning(深度学习)学习笔记整理(二)

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之: ...

  9. java反射 pdf_java反射学习笔记整理.pdf

    java反射学习笔记整理.pdf 还剩 15页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 反射笔记 ...

  10. 天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用)

    天猫整站SSM-后台分类管理-增加(做个人学习笔记整理用) CategoryController: request.getSession().getServletContext()// 获取的是pag ...

最新文章

  1. 、|| 和 、| 的区别(详尽版)
  2. python截图保存到内存卡_Python画月饼,云上过中秋,天池Python入门案例系列赛开启...
  3. 【GoLang】GoLang 错误处理 -- 异常处理思路示例
  4. 岗位内推 | 字节跳动招聘NLP、计算机视觉、推荐算法实习生
  5. c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...
  6. No slave process to process jobs, aborting 报错!!!
  7. CSS 文本溢出时显示省略标记
  8. matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...
  9. java 反射 field get方法_JAVA学习之反射getDeclaredField()方法与getField()方法的区别
  10. 浅谈CSS选择器中的空格
  11. Android Developers:使ListView滑动流畅
  12. 基于相关系数的影像匹配_论文推送 | 基于最优匹配算法的像控点电子点之记制作研究...
  13. ubuntu find 文件时权限不够
  14. 请求发送者与接收者解耦——命令模式(四)
  15. jieba分词工具的使用-python代码
  16. mkvtoolnix视频转换 v51.0.0中文版
  17. 前端请求接口出现415错误
  18. python 拆分pdf指定页_Python简单拆分PDF文件,将一个PDF文件拆分成指定份数
  19. 小啊呜产品读书笔记001:《邱岳的产品手记-03》第04+05讲 如何当好AI时代的产品经理 06讲 产品案例分析·TheGuardian的文本之美
  20. 记录配置Jupyter kernels

热门文章

  1. Lookup Transformation
  2. python对医学图像的基本处理_python OpenCV 实现图片的医学处理
  3. 使用Kieker(AspectJ)监控控制台程序
  4. 组装http报文调用小黄鸡网页端消息接口
  5. 【CCIE考试流程、CCIE考试费用及CCIE考试地点】
  6. “走进名企”之参观微软亚洲研究院
  7. OpenCV像素点操作 图片特效
  8. 记一次img标签图片不拉伸处理办法
  9. map获取key的方式
  10. OkHttp简单封装