如何获得一个其它运行着程序里的所有构件的句丙?(50分)

  • 主题发起人 主题发起人 bigroute
  • 开始时间 开始时间
B

bigroute

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获得一个其它运行着程序里的所有构件的句丙?
 
先得到他的句柄,再getchildwindow
 
具体点,最好有原码。<br>就拿Shell_TrayWnd来说吧。
 
如何获得一个其它运行着程序里的所有构件的句丙?<br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>最好先用SPY++观察他,了解结构后,然后你在一个一个的FIND..<br>不然你FIND了半天HANDLE还是=0,,我做OICQ自动注册器的时候就是用SPY++看着做的..:)
 
任務欄上各控件句柄:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var handle1,handle2:thandle;<br>&nbsp; &nbsp; str,str1:array [0..225] of char;<br>begin<br>&nbsp;handle1:=findwindow('Shell_TrayWnd',nil);<br>&nbsp;if handle1&lt;&gt;0 then<br>&nbsp; handle2:=GetWindow(handle1,GW_CHILD);<br>&nbsp; &nbsp;if handle2&lt;&gt;0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; getwindowtext(handle2,str,225);<br>&nbsp; &nbsp; &nbsp; getclassname(handle2,str1,225);<br>&nbsp; &nbsp; &nbsp; listbox1.Items.Add(inttostr(handle2)+' 標題:'+str+' 類名:'+str1);<br>&nbsp; &nbsp; &nbsp; while handle2&lt;&gt;0 do<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; handle2:=GetWindow(handle2,GW_HWNDNEXT);<br>&nbsp; &nbsp; &nbsp; &nbsp; if handle2&lt;&gt;0 then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getwindowtext(handle2,str,225);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getclassname(handle2,str1,225);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listbox1.Items.Add(inttostr(handle2)+' 標題:'+str+' 類名:'+str1);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp; end;<br><br>end;<br>
 
zxb200 &nbsp;你试了吗?<br>它不能把全部的都搜出不。
 
调用getWindow和递归方法,很简单,以前朕发过该贴,大概是关于怎样隐藏托盘图标<br>的问题
 
隐藏托盘图标没找到,
 
试试我的代码:<br>form上放一个edit,输入窗体名称,一个button,一个memo;<br>Function EnumChildProc(hwnd:HWND;lParam:LPARAM):Boolean; &nbsp;//EnumChildWindows的回调函数<br>var<br>&nbsp; ClassName:array[0..255]of char;<br>&nbsp; L:integer;<br>&nbsp; Buf:pChar;<br>begin<br>&nbsp; GetClassName(hwnd,ClassName,255);<br>&nbsp; Form1.Memo1.Lines.Add('类名:'+ClassName);<br><br>&nbsp; L:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0);<br>&nbsp; Form1.Memo1.Lines.Add('长度:'+IntToStr(L));<br><br>&nbsp; GetMem(Buf,255);<br>&nbsp; SendMessage(hwnd,WM_GETTEXT,255,LongInt(Buf));<br>&nbsp; <br>&nbsp; Form1.Memo1.Lines.Add('内容:'+Buf);<br>&nbsp; Form1.Memo1.Lines.Add('=============');<br><br>&nbsp; FreeMem(Buf);<br><br>&nbsp; Result:=true;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; hParent:THandle;<br>begin<br>&nbsp; hParent:=FindWindow(nil,pChar(Edit1.Text));<br>&nbsp; if hParent&lt;&gt;0 then<br>&nbsp; &nbsp; Memo1.Lines.Add('主窗体句柄:'+IntToStr(hParent));<br>&nbsp; EnumChildWindows(hParent,@EnumChildProc,0);<br>end;<br><br>
 
下面是结果<br>主窗体句柄:1704976<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>类名:<br>长度:0<br>内容:&amp;E<br>=============<br>
 
后退
顶部