读书人

ListView_GetItem(List_Handle,objIte

发布时间: 2012-12-29 10:28:09 作者: rapoo

ListView_GetItem(List_Handle,objItem) 数据为空?
List_Handle为目标窗口的systemlistview32的句柄

intP := -1;
for intIndex := 0 to ListView_GetItemCount(List_Handle) do begin
intP := ListView_GetNextItem(List_Handle,intP,LVNI_ALL);
if intP <> -1 then begin
objItem.mask := LVIF_PARAM;
objItem.iItem := intP;
objItem.iSubItem := 0;
ListView_GetItem(List_Handle,objItem);
Memo1.Lines.Add(IntToStr(intP));
Memo1.Lines.Add(objItem.pszText);
Memo1.Lines.Add('=====================');
end;
end;

结果如下:

0

=====================
1

=====================
2

=====================
3

=====================
4

=====================
5

=====================

哪位给个介绍原因???




[解决办法]

引用:
以前弄过类似的东西,记得是要在目标进程内申请空间,发消息,再读出数据

+1

因为飞鸽传书进程的地址空间跟你的进程的地址空间不一样。比如你的objItem在你的进程的地址是123,
而飞鸽传书的地址为123的地方显然不会是你的objItem!就是说,要操作飞鸽传书的地址空间!
用到的API:
OpenProcess
VirtualAllocEx
WriteProcessMemory
VirtualFreeEx
ReadProcessMemory
CloseHandle

ps:原生控件Edit、Button等由系统自动完成数据拷贝和地址空间的转换,所以无需用上述方法。

读书人网 >.NET

热点推荐