首页
社区
课程
招聘
[求助]如何得到在界面上显示的数据在内存中的位置啊?
发表于: 2009-8-12 16:30 3837

[求助]如何得到在界面上显示的数据在内存中的位置啊?

2009-8-12 16:30
3837
比如GIS软件上画出的图形的坐标数据和其它属性数据, 应该如何找到其内存地址, 并自编程序可以自动提出出来, 有没有相关的技术文章或是提示可以参考一下啊? 谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
最近我也在烦一些类似的问题
稍微有点不同的是我想知道文本框里的数据到底是放在什么区域里的?
具体位置可能不可考究,但是会在哪个区域应该可以知道吧?

帮顶一下
2009-8-12 19:22
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
找内存地址你用ce啊
2009-8-12 20:46
0
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CE是不错的, 但我需要的是在屏幕上绘制的所有图形的数据, 这样CE只适合找单个的数据, 不太适合找大量数据吧.
是不是可以通过定位WM_PAINT这样的消息来锁定绘制消息再从其中找到数据啊.
有没有可以参考的文章啊?
2009-8-13 07:08
0
雪    币: 265
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yvi
5
1、用CE找到每个数据的基址。相同的数据肯定有一个相同的基址,甚至所有的数据有一个总基址。
   类似于这样:
   [[[[总基址]+偏移1]+偏移2]+。。。]+X坐标偏移]   //至于数据到底几级,得看楼主自己的软件
2、建一个对话框。放上静态控件,比如X坐标的.这里用IDC_XPOS
3、写程序。
   DWORD   dwProcessId; //PID
     DWORD buff;//存放临时地址
   FLOAT  xpos;//存放的X坐标数据,一般为单精浮,得看你的是什么软件
   TCHAR szbuff[64];
   HWND hWnd=FindWindow。。。//根据程序的类名或窗口名得到窗口句柄
   GetWindowThreadProcessId(hWnd,   &dwProcessId);//根据窗口句柄得到PID
    HANDLE hProcess=OpenProcess(PROCESS_VM_READ,FALSE,dwProcessId);//根据PID打开进程的READ权限,打开以后就可以读了.
    ReadProcessMemory(hProcess,(LPCVOID)(总基址),(LPVOID)&buff,4,NULL);       
    ReadProcessMemory(hProcess,(LPCVOID)(buff+偏移1),(LPVOID)&buff,4,NULL);
    ReadProcessMemory(hProcess,(LPCVOID)(buff+偏移2),(LPVOID)&buff,4,NULL);
    .........
     ReadProcessMemory(hProcess,(LPCVOID)(buff+X坐标偏移),(LPVOID)&xpos,4,NULL);
     //X坐标的数据已经读到xpos里了,下面是显示
   wsprintf(szbuff,(TCHAR*)_T("%d"),(int)xpos);   //这儿得转换一下,不然读出来是你不认识的
     SetDlgItemText(IDC_XPOS,szbuff);

OK,祝楼主好运....
这种方式适用于数据的内存地址是变化的方式,如果数据的内存地址是不变的,则更简单.去掉找基址的过程,用CE直接找到数据的内存地址,读的时候也不用从基址往下读,直接
ReadProcessMemory(hProcess,(LPCVOID)(X坐标的内存地址),(LPVOID)&xpos,4,NULL);
2009-8-14 19:42
0
游客
登录 | 注册 方可回帖
返回
//