标题:关于SendMessage获取ListBox内容的问题
取消只看楼主
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
已结贴  问题点数:100 回复次数:14 
关于SendMessage获取ListBox内容的问题
我使用SendMessage(hwnd,LB_GETTEXT,Index,Integer(@cbText));
可以获取没有图标的ListBox内容,如下图:

但去获取不到有图片的ListBox的内容,如下图:
搜索更多相关主题的帖子: SendMessage ListBox 获取 
2010-07-17 13:13
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
回复 3楼 sunyh1999
请问能获取有图标的的ListBox里的内容吗?这段代码我在网络上看了很多次。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-18 22:38
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
以下是引用Knocker在2010-7-19 13:37:44的发言:

可以试试 WM_COPY 或许是hwnd找错了
hwnd应该没有错的,而且我可以获取其项数,就是获取不到其内容。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-19 16:17
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
以下是引用sunyh1999在2010-7-19 11:01:38的发言:

sorry,这我就不知道了,你可以到网上查查相关的资料,祝你好运
仍然非常感谢的你热情帮助,小生有所得罪之处万望见谅!

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-19 16:18
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
以下是引用Knocker在2010-7-19 23:51:33的发言:

试了试是取不到
显示文字肯定要调用API的,如果能Hook到这个API我想就成了,但我不会Hook API。Knocker有这方面相关的资料不?

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-20 08:42
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
这个问题一定要解决。。。。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-21 18:47
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
谢谢兄台,兄台这段代码我有些看不明白的,就是那段汇编代码看得模糊,能否解释下呢?谢谢!

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-22 13:08
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
回复 14楼 Knocker
兄台这个方法相当不错,我试过了进程内的没问题。
进程外的我也试过了,崩溃了,我想是得要把我定义的变量放到映射内存中,正在尝试中。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-22 14:00
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
PShare^.ListBox数据类型为TListBox。
PShare^.ListBox已经使用CreateFileMapping等函数映射到内存中了
hProcess已经使用GetWindowThreadProcessId得到的外部进程的线程句柄。

//我的思路是这样的,先为PShare^.ListBox指定进程的虚拟空间
PShare^.ListBox:=TListBox(VirtualAllocEx(hProcess, nil, SizeOf(TListBox),
  MEM_COMMIT, PAGE_READWRITE));
然后读到PShare^.ListBox
ReadProcessMemory(hProcess,Pointer(PShare^.PCWPStructShare.hwnd),
  Pointer(@PShare^.ListBox),SizeOf(TListBox),0);
Edit1.Text:=IntToStr(PShare^.ListBox.Items.Count);
可是程序运行时崩溃,是不是我的思路错了。谢谢!

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-22 19:39
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
以下是引用你们都要疼我哦在2010-7-22 20:57:52的发言:

用内存映射共享啊。CreateFileMapping创建用于共享的内存映射文件对象hFile记得为-1 ---OpenFileMapping打开---MapViewOfFile映射一个视图 得到共享区域指针。。。。。。使用。。。。解除映射。。。关闭。。。步骤不可少。

楼上有高手讲了,这个最好是写成DLL,然后目标进程LoadLibrary注入,这样是比较流行的。
另外弱弱的问一下,楼主这个:=是C啊。。。怎么好象以前瞄过的PASCAL
这个我肯定是用了的。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-22 21:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313255-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.403301 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved