如何读取其它应用程序中ListView内的各行信息?高手请教。(100分)

  • 主题发起人 主题发起人 wz_hzb
  • 开始时间 开始时间
W

wz_hzb

Unregistered / Unconfirmed
GUEST, unregistred user!
如何读取其它应用程序中ListView内的各行信息?我在SPY++中看到的是SysListView32类。<br>?高手请教。
 
这有点难,获得ListView的Handle,向Handle发消息,需要用hook。
 
首先确定那个ListView的HWND,在Sqy++里可以看到。<br>然后调用int ListView_GetItemCount(HWND hwnd)获得它的列表项数目。<br>接着调用int ListView_GetNextItem(HWND hwnd,int iStart, UINT flags)<br>取得一个列表项索引,利用这个索引调用void WINAPI ListView_GetItemText(<br>&nbsp; &nbsp; HWND hwnd, <br>&nbsp; &nbsp; int iItem, //索引 <br>&nbsp; &nbsp; int iSubItem, <br>&nbsp; &nbsp; LPSTR pszText, <br>&nbsp; &nbsp; int cchTextMax <br>&nbsp; &nbsp;)取得列表项文本(pszText);如果成功继续直到返回-1。
 
参阅MSDN中ListView_XXXX的辅助函数
 
to sunfl:<br>&nbsp; &nbsp; 你的回答让我看到了希望,ListView_GetNextItem<br>与ListView_GetItemText如何配合使用.能不能具体点,谢谢!
 
to sunfl:<br>我是这样写代码的:<br>char *pText;<br>pText=(char *) malloc(1024);<br>ListView_GetItemText(pp1,ListView_GetNextItem(pp1,-1,LVNI_ALL),0,pText,1024);<br>pp1是其它应用程序的ListView句柄。<br>编译时没有错,但运行完ListView_GetItemText时会造成被GET应用程序的出错关闭。<br>我还发现LISTVIEW内有图标,是不是跟图标有关系?<br>
 
kinglaw的回答很有启发性,我试试。
 
to kinglaw:<br>“windowhook能使winhook所在的dll进入另一进程的地址空间”这句话所讲的技术又如何实现呢?<br>期待你的回答。
 
wz_hzb,告诉我你的email。<br>我给你发一个例子程序。
 
to kinglaw:<br>我的邮箱是 &nbsp;hzb168@wz163.com<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 或organiger@mail.wz.zj.cn<br>先谢了!<br>
 
to wz_hzb:<br>程序已发,请查收!
 
参考kinglaw
 
wz_hzb:<br>看看delphi带的win32api的帮助吧<br>获取内容可以用 ListView_GetItemText(),它等同于发LVM_GETITEMTEXT消息。<br>The ListView_GetItem macro retrieves the text of a list view item or subitem. You can use this macro or explicitly send the LVM_GETITEMTEXT message.<br>但是还有帮助没说明的就是只能在ListView的同一进程使用,才行的。<br>原因是ListView_GetItemText()是向同一进程的pszText指针写内容的。<br>如直接向另一进程的其中ListView发LVM_GETITEMTEXT消息就会可能出现你上述的错误。<br>因为内容写到ListView进程的的地址上去了。<br>BTW:能够用指针传数据的win32消息,据我所知只有wm_getitem,wm_setitem,wm_copydata等几个<br>,microsoft用特别的技术实现的。<br>那该如何使用LVM_GETITEMTEXT消息获得另一进程的ListView的内容呢?<br>方法就是 windowhook。<br>windowhook能使winhook所在的dll进入另一进程的地址空间,再在该dll中用<br>ListView_GetItemText()获得ListView的内容。<br>有关windowhook,可以用hook作关键字查询以前的贴子
 
&nbsp; &nbsp;我想编写一个 程序A 去监视 程序B 中的某个 FORM ,并在 程式B 的这个 FORM 出现<br>时自动取得 FORM 上 EDIT.TEXT 的内容。同是DELPHI程式,程序B 无源代码。不是在<br>两程式间通讯,不存在通讯协议,更不是木马。<br><br>&nbsp; &nbsp; 是这样的:单位一 收费程式B 现在要增加一项收费,但程式B 没有源代码修改不了。所以<br>我想可能有两种方式实现。一种是 DLL 陷井,写一个 同名、内部同结构的DLL去替代原有<br>的DLL,完成工作后转发参数(但在不能切底了解此 DLL 内部时,好危险,放弃。);另<br>一种是我上面提到的,在 程式B 收费窗出现时获取其中的数据。在收费窗关闭后,程式A<br>弹出,显示合计数。<br><br>&nbsp; &nbsp; 请问应如何实现?最好能给出代码。(我想应能实现,比如东方快车的屏幕翻译。)
 
多人接受答案了。
 
能把您"如何读取其它应用程序中ListView内的各行信息?"的Demo发一份给我吗?<br>我研究了好久总试不出来。<br>谢谢了!
 
能把您"如何读取其它应用程序中ListView内的各行信息?"的Demo发一份给我吗?<br>我研究了好久总试不出来。<br>谢谢了!<br><br>我的Email:<br>xiaoer2000@21cn.com
 
我也想要!!!<br>onefish@163.net
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
后退
顶部