我用ReadProcessMemory函数想读出QQ对对碰游戏的棋盘数组的数据可是输出的却是一个地址,但是用同样的方法读取座位号的基址就可以正确输出作为号,所以想请教一下大家这是什么原因,以下是代码:出问题的那一部分我变成绿色了。
#include "windows.h"#include <iostream.h>class jubing
{
public: HWND ctjubing; //定义一个HWND(也是一种句柄)类型的变量用来存放窗体句柄,这里千万别搞错了
DWORD pid; //存放进程id
HANDLE jcjubing; //定义一个HANDLE(句柄)类型的变量用来存放进程句柄,这里千万别搞错了
int zwh; //定义一个用来保存座位号的变量
int chuangtijubing(); //在类里面声明一个成员函数获得窗体句柄(函数的定义部分在下面)
int jinchengid(); //在类里面声明一个成员函数获得进程ID (函数的定义部分在下面)
int jinchengjubing(); //在类里面声明一个成员函数获得进程句柄(函数的定义部分在下面)
int zuoweihao(); //在类里面声明一个成员函数获得座位号 (函数的定义部分在下面)};
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//类成员函数的定义部分jubing::chuangtijubing() //上面声明的函数这里写定义部分(返回窗体句柄)
{
ctjubing = FindWindow(NULL,"对对碰角色版"); //获取窗体句柄
return 1;
}jubing::jinchengid() //上面声明的函数这里写定义部分(返回进程ID)
{
GetWindowThreadProcessId(ctjubing,&pid); //获取进程ID return 1;}jubing::jinchengjubing() //上面声明的函数这里写定义部分(返回进程句柄)
{
jcjubing = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //返回进程句柄 return 1;
}jubing::zuoweihao() //上面声明的函数这里写定义部分(返回座位号)
{
ReadProcessMemory(jcjubing,(int *)0x47c9d4,&zwh,4,NULL); //该函数用来返回座位号
return 1;
}///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
bool qipanshuzu() //自定义函数实现输出棋盘数组
{
jubing a; //实例化一个类对象
a.chuangtijubing(); //取得窗体句柄
a.jinchengid();//取得进程id
a.jinchengjubing();//取得进程句柄
a.zuoweihao(); //取得座位号
cout<<a.zwh<<endl; //输出座位号 //int shiji; int qipanshuzu[8][8]; if ((a.zwh == 0) && (a.ctjubing != NULL)) //如果座位号返回值为0并且窗体句柄不为空的话
{
ReadProcessMemory(a.jcjubing,(int *)0x479418/*0x479418是棋盘数组的基址*/,&qipanshuzu,200,0); //读取棋盘数组
cout<<qipanshuzu<<endl; //输出座位号 }
return 0;}
int main()
{
qipanshuzu(); //调用棋盘数组(自定义函数) return 0;
}///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
#include "windows.h"#include <iostream.h>class jubing
{
public: HWND ctjubing; //定义一个HWND(也是一种句柄)类型的变量用来存放窗体句柄,这里千万别搞错了
DWORD pid; //存放进程id
HANDLE jcjubing; //定义一个HANDLE(句柄)类型的变量用来存放进程句柄,这里千万别搞错了
int zwh; //定义一个用来保存座位号的变量
int chuangtijubing(); //在类里面声明一个成员函数获得窗体句柄(函数的定义部分在下面)
int jinchengid(); //在类里面声明一个成员函数获得进程ID (函数的定义部分在下面)
int jinchengjubing(); //在类里面声明一个成员函数获得进程句柄(函数的定义部分在下面)
int zuoweihao(); //在类里面声明一个成员函数获得座位号 (函数的定义部分在下面)};
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//类成员函数的定义部分jubing::chuangtijubing() //上面声明的函数这里写定义部分(返回窗体句柄)
{
ctjubing = FindWindow(NULL,"对对碰角色版"); //获取窗体句柄
return 1;
}jubing::jinchengid() //上面声明的函数这里写定义部分(返回进程ID)
{
GetWindowThreadProcessId(ctjubing,&pid); //获取进程ID return 1;}jubing::jinchengjubing() //上面声明的函数这里写定义部分(返回进程句柄)
{
jcjubing = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //返回进程句柄 return 1;
}jubing::zuoweihao() //上面声明的函数这里写定义部分(返回座位号)
{
ReadProcessMemory(jcjubing,(int *)0x47c9d4,&zwh,4,NULL); //该函数用来返回座位号
return 1;
}///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
bool qipanshuzu() //自定义函数实现输出棋盘数组
{
jubing a; //实例化一个类对象
a.chuangtijubing(); //取得窗体句柄
a.jinchengid();//取得进程id
a.jinchengjubing();//取得进程句柄
a.zuoweihao(); //取得座位号
cout<<a.zwh<<endl; //输出座位号 //int shiji; int qipanshuzu[8][8]; if ((a.zwh == 0) && (a.ctjubing != NULL)) //如果座位号返回值为0并且窗体句柄不为空的话
{
ReadProcessMemory(a.jcjubing,(int *)0x479418/*0x479418是棋盘数组的基址*/,&qipanshuzu,200,0); //读取棋盘数组
cout<<qipanshuzu<<endl; //输出座位号 }
return 0;}
int main()
{
qipanshuzu(); //调用棋盘数组(自定义函数) return 0;
}///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
int zwh;//保存座位号
ReadProcessMemory(进程句柄,(int *)0x47c9d4/*座位号基址*/,&zwh,4,NULL); //该函数用来返回座位号
cout<<zwh<<endl;
这样写正确输出了座位号。但是我想输出棋盘数组的时候是下面这样写的输出的结果就是0x12FE1C :HANDLE 进程句柄;
int qipanshuzu[8][8]; //保存棋盘数组ReadProcessMemory(进程句柄,(int *)0x479418/*0x479418是棋盘数组的基址*/,&qipanshuzu,200,0); //读取棋盘数组cout<<qipanshuzu<<endl; 这句完了输出的结果是0x12FE1C
ReadProcessMemory(进程句柄,(LPVOID)0x479418地址 (int *) 有问题吧,少了一半了。应该是VOID 或 DWORD 类型
cout<<qipanshuzu[i]<<endl;