如何通过句柄读取TLISTBOX的内容有文本-400分,就急,不在线等,救急 ( 积分: 300 )

  • 主题发起人 主题发起人 蓝叶菱
  • 开始时间 开始时间

蓝叶菱

Unregistered / Unconfirmed
GUEST, unregistred user!
一个另外应用程序,有一个列表。我通过<br>function&nbsp;EnumChildWindowsProc(hwnd,lparam:integer):Boolean;stdcall;取得了它的句柄和名称,显示为TListBox,句柄为583788<br>求,怎么取出TListBox的内容。(不使用抓图)<br>&nbsp;&nbsp;mStrings.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;vItemCount&nbsp;:=&nbsp;SendMessage(mHandle,&nbsp;LB_GETCOUNT,&nbsp;0,&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;I&nbsp;:=&nbsp;0&nbsp;to&nbsp;vItemCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetLength(S,&nbsp;SendMessage(mHandle,&nbsp;LB_GETTEXTLEN,&nbsp;I,&nbsp;0));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMessage(mHandle,&nbsp;LB_GETTEXT,&nbsp;I,&nbsp;Integer(@S[1]));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mStrings.Add(S);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;SetLength(S,&nbsp;0);<br>&nbsp;&nbsp;finally<br>上次回答了,但是我使用的时候,读取全是空白,主要原因是虽然是TListBox,但是内部有点象TListview列表,有颜色的格式的.我找了帮助查到LB_GETITEMDATA但是不知道怎么使用????<br>只要文本.不要格式.
 
writeprocessmemory<br>readprocessmemory<br>sendmessage
 
2ccc上有例子.
 
我试了你的代码没问题啊。可以用啊。。。
 
我的也可以使用,只是对标准的listbox有效
 
上面的代码标准的TLIST没有问题。<br>可是我试过,不灵,只能读取ITEM的数目,但是内容不能读取,我认为,既然TListBox有颜色,是不是该程序使用了Canvass绘图进行输出的,并非标准的String类型,所以LB_GETTEXT不灵。<br>有颜色的,每行颜色不同,绘图的可能比较大,这个也许是读取不到信息的主要原因。
 
我模拟出原代码如下:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3859968<br>各位试试看。。
 
利用剪切板来获取试试。<br>--拷贝<br>SendMessage(listbox.Handle,&nbsp;WM_COPY,&nbsp;0,&nbsp;0);<br>--粘贴<br>SendMessage(memo1.Handle,&nbsp;WM_PASTE,&nbsp;0,&nbsp;0);
 
具体方法见我的笔记:<br>http://www.delphibbs.com/keylife/iblog_show.asp?xid=6393
 
如果真是画出来的话,要取的文本内容,只能写个API&nbsp;HOOK了。就想金山词霸屏幕取词那样,在ExtTextOut&nbsp;API函数之前插入我们的函数读出字符了。。。。一点愚见,怎么做我也不懂,delphi核心编程有写。。。
 
可是金山居然无法捕捉到词汇。
 
贴一段代码可能对你有帮助<br>下面这个是对另一个程序中TLISTVIEW控件,你改改!<br>library&nbsp;Project2;<br><br>uses<br>&nbsp;&nbsp;Windows,<br>&nbsp;&nbsp;SysUtils,<br>&nbsp;&nbsp;Classes,<br>&nbsp;&nbsp;CommCtrl,<br>&nbsp;&nbsp;ComCtrls,<br>&nbsp;&nbsp;Dialogs;<br><br>{$R&nbsp;*.res}<br><br>Type<br>&nbsp;&nbsp;&nbsp;&nbsp;PFindInfo=^TFindInfo;<br>&nbsp;&nbsp;&nbsp;&nbsp;TFindInfo=Record<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurID:THandle;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Handle:THandle;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br><br>function&nbsp;EnumChildWindowsProc(hwnd:HWND;&nbsp;lParam:LPARAM):Boolean;stdcall;<br>Var<br>&nbsp;&nbsp;&nbsp;&nbsp;Buf:Array[0..255]&nbsp;of&nbsp;Char;<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo:PFindInfo;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Result:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo:=Ptr(lParam);<br>&nbsp;&nbsp;&nbsp;&nbsp;FillChar(Buf,sizeof(buf),0);<br>&nbsp;&nbsp;&nbsp;&nbsp;GetClassName(hwnd,@Buf,255);<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;UpperCase(Buf)='TLISTVIEW'&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindInfo.Handle:=hwnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>function&nbsp;EnumWindowsProc(hwnd:HWND;&nbsp;lParam:LPARAM):Boolean;stdcall;<br>Var<br>&nbsp;&nbsp;&nbsp;&nbsp;dwID:THandle;<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo:PFindInfo;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Result:=true;<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo:=Ptr(lParam);<br>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowThreadProcessId(hwnd,dwID);<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dwID=FindInfo.CurID&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumChildWindows(hwnd,@EnumChildWindowsProc,Integer(FindInfo));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;Load();stdcall;<br>Var<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo:TFindInfo;<br>&nbsp;&nbsp;&nbsp;&nbsp;Item:&nbsp;TLVItem;<br>&nbsp;&nbsp;&nbsp;&nbsp;lItem:TListItem;<br>&nbsp;&nbsp;&nbsp;&nbsp;i,Count:Integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;Str:String;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Str:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo.CurID:=GetCurrentProcessID;<br>&nbsp;&nbsp;&nbsp;&nbsp;FindInfo.Handle:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;EnumWindows(@EnumWindowsProc,Integer(@FindInfo));<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;FindInfo.Handle&lt;&gt;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count:=ListView_GetItemCount(FindInfo.Handle);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i:=0&nbsp;to&nbsp;Count-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FillChar(Item,sizeof(Item),0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Item&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mask&nbsp;:=&nbsp;LVIF_PARAM;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iItem&nbsp;:=&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iSubItem&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListView_GetItem(FindInfo.Handle,Item);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lItem&nbsp;:=&nbsp;TListItem(Item.lParam);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Str=''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Str:=lItem.Caption+'-'+lItem.SubItems.Strings[0]+'-'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lItem.SubItems.Strings[1]+'-'+lItem.SubItems.Strings[2]+'-'+lItem.SubItems.Strings[3]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Str:=Str+#13#10+lItem.Caption+'-'+lItem.SubItems.Strings[0]+'-'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lItem.SubItems.Strings[1]+'-'+lItem.SubItems.Strings[2]+'-'+lItem.SubItems.Strings[3];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(Str);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>Exports<br>&nbsp;&nbsp;&nbsp;&nbsp;Load;<br>begin<br>end.
 
咦:<br>&nbsp;&nbsp;&nbsp;这里又开了个同样的题目!呵呵!
 
后退
顶部