用MFC开发1连连看辅助器

本文介绍了如何使用MFC和C++开发连连看游戏的辅助器。通过调用API函数获取游戏窗口句柄、窗口位置信息,改变鼠标位置,并读取游戏内存数据来获取棋盘状态。在VS2008中创建MFC对话框项目,利用Edit Control显示游戏数据,并分析内存中的棋子状态。最后,提供了一个检查两点能否消除的算法,以及源代码下载链接,帮助实现自动消除功能。
摘要由CSDN通过智能技术生成

首先介绍下要用到的几个API函数

1、通过标题获取窗口句柄

 HWND hGame=FindWindow(NULL,_T("QQ游戏 - 连连看角色版"));

2、 获得游戏窗口的位置信息

RECT gameRect

GetWindowRect(hGame,&gameRect);

3、改变鼠标位置坐标

SetCursorPos(x,y);

4、得到鼠标的位置坐标

POINT ps;

GetCursorPos(&ps);

5、获得窗口进程ID

DWORD processid ;

GetWindowThreadProcessId(hGame,&processid);

6、打开指定进程

 HANDLE processH=OpenProcess(PROCESS_ALL_ACCESS,false,processid);

7、读取指定进程内存数据 

 DWORD byread;
 LPCVOID pStear=(LPCVOID)0x00189F78; 
 LPVOID nBuff[11][19];//读取的数据存入缓冲区
 ReadProcessMemory(processH,pStear,nBuff,11*19,&byread);


在VS2008下新建个MFC的对话框项目

1、打开对话框,拖一个Edit Control进来用来显示游戏读取过来的数据

属性Vertical Scroll设为true,want return设为true,Multiline设为true

右击Edit添加变量,类型为CString,类别为value变量名m_edit1

再往窗体上托两个按钮


2、练练看游戏如图




其实这是一个11*19 的矩阵,在内存中每个棋子占用一个字节(8位),一共能表示256个结果

首先要找左上角棋子的地址,然后就能推算出其他棋子的位置地址,打开CE多点几次就能把第一个棋子的地址找到,我找到的是0x00189F78,每个电脑基本都一样,因为这个是程序的虚拟地址

使用OD查看这短内存区域的数据如下图


然后对应的游戏界面



可以观察出,为值为00的表示没有棋子,非零的表示有棋子,数值相同表示棋子一样。

经过上面分析,我们开始把棋盘数据读入到自己的程序里

首先定义一个存放数据的全局变量,和窗口句柄

byte chessdata[11][19];

HWND hGame;//游戏窗口句柄

左击清除按钮给按钮添加事件


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值