社区
进程/线程/DLL
帖子详情
比较复杂的问题:如何得到别的进程中的ListCtrl控件的文字
goodsmaker
2004-10-25 02:09:31
例如我想得到我的电脑中的listctrl的文字.
关键问题是能让listctrl控件所在的程序能访问我的程序中的内存
...全文
166
14
打赏
收藏
比较复杂的问题:如何得到别的进程中的ListCtrl控件的文字
例如我想得到我的电脑中的listctrl的文字. 关键问题是能让listctrl控件所在的程序能访问我的程序中的内存
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
goodsmaker
2004-12-23
打赏
举报
回复
up
goodsmaker
2004-12-21
打赏
举报
回复
我还是没有满意的方法,
怎么没人帮我
nouse2
2004-10-26
打赏
举报
回复
???
goodsmaker
2004-10-26
打赏
举报
回复
怎么没人帮我
goodsmaker
2004-10-25
打赏
举报
回复
void CGetTextDlg::OnBtnGettext()
{
// TODO: Add your control notification handler code here
UpdateData();
HWND h = NULL;//listctrl的句柄,具体的找法和赋值很简单
//h = xxx
//用class判断是否是listctrl,是否是report模式,不成立返回
DWORD pid = 0;
GetWindowThreadProcessId(h, &pid);
HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
void* pvir = VirtualAllocEx(hp, 0, 1000, MEM_COMMIT| MEM_RESERVE, PAGE_EXECUTE_READWRITE);
char* pchar = (char*)pvir + 100;
char buf[1000];
LVITEM& lvi = *(LVITEM*)buf;//在buf中给lvi赋值,此后要传到pvir中
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = 0;
lvi.cchTextMax = 900;
lvi.pszText = pchar;//欲得到的文本放在pvir[100]处,此处的地址不能是buf+100,
//因为buf在后面的listctrl的消息处理中无法访问
//省了一个VirtualAllocEx
WriteProcessMemory(hp, pvir, buf, 1000, NULL);//由于pvir不位于本进程,所以要通过给部分buf赋值,然后传入
::SendMessage(h, LVM_GETITEMTEXT, (WPARAM)0, (LPARAM)pvir);
ReadProcessMemory(hp, pvir, buf, 1000, NULL);//执行消息后,从pvir导出内容
VirtualFreeEx(hp, pvir, 1000, MEM_RELEASE);
pchar = (char*)buf + 100;
SetWindowText(pc);//显示到对话框标题
}
//省略了无关代码,见谅
goodsmaker
2004-10-25
打赏
举报
回复
我做成功了,上面的p不能访问的改造方法是用
WriteProcessMemory,和ReadProcessMemory
各切换一次就可以了.
全部的代码我整理好帖出来
不过还有一个问题
VirtualAllocEx只在win2000下支持
9x下我如何做?
请大家提示我.
goodsmaker
2004-10-25
打赏
举报
回复
我按 flyelf(空谷清音) 的办法做
void CGetTextDlg::OnButtonGetText()
{
UpdateData();
HWND h = NULL;
sscanf(m_sHwnd, "%x", &h);
if (!IsWindow(h))
{
AfxMessageBox("Handle not window");
return;
}
DWORD pid = 0;
GetWindowThreadProcessId(h, &pid);
HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
void* p = VirtualAllocEx(hp, 0, 70000, MEM_COMMIT| MEM_RESERVE, PAGE_EXECUTE_READWRITE);
char* pc = (char*)p + 100;
LVITEM& lvi = *(LVITEM*)p;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = 0;
lvi.cchTextMax = 100;
lvi.pszText = pc;
::SendMessage(h, LVM_GETITEMTEXT, (WPARAM)0, (LPARAM)&lvi);
SetWindowText(pc);
VirtualFreeEx(hp, p, 70000, MEM_RELEASE);
}
这次是p不让我访问,问题是p属于listctrl的进程
好难啊,帮帮我.
visioz
2004-10-25
打赏
举报
回复
能分享一下代码吗?
goodsmaker
2004-10-25
打赏
举报
回复
忘了一句话
上面的代码还要做
共享段,共享lvi.pszText = lpszText中的地址所在的内存
goodsmaker
2004-10-25
打赏
举报
回复
首先谢谢大家的帮助和关注
后来我使用hook技术可以进入listctrl的进程,也可以的到listctrl的文字
但问题是非常复杂,
1.定义一个hook函数,我选GetMsgProc
2.SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hDllModule, 0);
3.PostMessage(m.hWatch, KsMsg_WantGetText, 0, 0);//向listctrl的窗口发送一个自定义消息
//我就可以在GetMsgProc中进入listctrl进程
4.在GetMsgProc中判断 code, 消息类型KsMsg_WantGetText, IsWindow(h)
listctrl的线程id等于当前线程id
上面的条件都成立,然后
::SendMessage(h, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
//为了在listctrl进程中执行这有用的一条代码,费了很多劲
5.成功得到后发消息通知我的代码,并Unhook
问题是我这样做,效率很低(绕了很多圈子,hook了很多无用进程的消息)
goodsmaker
2004-10-25
打赏
举报
回复
要得到listctrl的文字,我如下使用
(省略代码无关部分)
char lpszText[12];
LVITEM lvi;
...
lvi.pszText = lpszText;
::SendMessage(h, LVM_GETITEMTEXT, (WPARAM)nItem, (LPARAM)&lvi);
如果HWND是我的程序中的listctrl的HWND,那没问题
当HWND是别的程序中的listctrl的HWND时,执行时出错,
此时是别的程序被结束,我的程序道没事,不过不能得到正确结果.
后来我才知道是提供的地址lpszText无法被listctrl程序访问.
mingbao
2004-10-25
打赏
举报
回复
首先用FindWindow( )等方法得到要访问的窗口的主框架指针,
然后访问里面的控件。
visioz
2004-10-25
打赏
举报
回复
楼上正确
flyelf
2004-10-25
打赏
举报
回复
OpenProcess
VirtualAllocEx
ReadProcessMemory
C#编程经验技巧宝典
73 <br>0106 如何获得一个字符串
中
数字的长度 74 <br>0107 如何获得字符串
中
数字或字母的长度 74 <br>0108 如何获得字符串
中
某个数字的位置 75 <br>0109 获得字符串
中
汉字的个数 76 <br>0110...
Redis全程攻略
这个
问题
在大并发,高负载的网站
中
必须考虑.redis数据库
中
的所有数据都存储在内存
中
。由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势。 项目
中
使用Redis,主要是从...
JAVA上百实例源码以及开源项目源代码
Java波浪
文字
,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,
得到
Graphics实例,
得到
Image实例,填充颜色数组数据,初始化颜色数组。...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章