如何获得窗口控件句柄? ( 积分: 100 )

  • 主题发起人 主题发起人 idonot
  • 开始时间 开始时间
I

idonot

Unregistered / Unconfirmed
GUEST, unregistred user!
最近碰到这样一个问题,还望哪位高手指教!<br> &nbsp;我先用FindWindow获得了窗体的句柄后,再用FindWindowEx想获得窗体中一个panel控件上的button的句柄(窗体上有多个panel,都无caption,我用spy++只能得到它们的class name,这样就无法得到button的句柄,若只有一个panel或都有caption,则可以),现不知如何解决这个问题,希望能得到高手们尽快的回复.<br> &nbsp;idonot@163.com<br> &nbsp;不胜感激!
 
最近碰到这样一个问题,还望哪位高手指教!<br> &nbsp;我先用FindWindow获得了窗体的句柄后,再用FindWindowEx想获得窗体中一个panel控件上的button的句柄(窗体上有多个panel,都无caption,我用spy++只能得到它们的class name,这样就无法得到button的句柄,若只有一个panel或都有caption,则可以),现不知如何解决这个问题,希望能得到高手们尽快的回复.<br> &nbsp;idonot@163.com<br> &nbsp;不胜感激!
 
用FindWindow获得了窗体的句柄后,用API,GetWindow可以得到它的所有子窗口句柄,uCmd先为GW_CHILD,GW_HWNDFIRST,GW_HWNDNEXT.对每个PANEL重复就可以得到BUTTON子窗口句柄<br><br>通过窗体的句柄然后可以得到panel对象,你可设置PANEL的tag属性值不同来区分不同的PANEL
 
FindWindow<br>GetWindow
 
spy++在什么地方可以下载??
 
用FindWindowEx,写个循环就行了
 
修改了我前几天的一个例子,另外一个程序里面我放了很多个Panel,Panel上面放了几个Button,主要是用FinWindowEx,关键是搞清楚从属关系,Panel属于Form,Button又属于Panel,所以FindWindowEx的前后参数要设置对就没有问题了<br><br><br>procedure TForm111111.Button1Click(Sender: TObject);<br>var<br> &nbsp; &nbsp;FormHandle , PanelHanlde , ButtonHandle: THandle;<br> &nbsp; &nbsp;I : Integer;<br>begin<br> &nbsp; &nbsp;FormHandle := FindWindow(nil, PChar('Form1'));// 另外一个程序的标题,我在那个程序里面放了多个Panel,并在Panel上面放了多个Button<br> &nbsp; &nbsp;I := 0;<br> &nbsp; &nbsp;if FormHandle &lt;&gt; 0 then begin<br> &nbsp; &nbsp; &nbsp; &nbsp;// 先找到第一个Panel控件<br> &nbsp; &nbsp; &nbsp; &nbsp;PanelHanlde := FindWindowEx(FormHandle, 0, PChar('TPanel'), nil);<br> &nbsp; &nbsp; &nbsp; // 循环找<br> &nbsp; &nbsp; &nbsp; &nbsp;while PanelHanlde &lt;&gt; 0 do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ButtonHandle := FindWindowEx(PanelHanlde, 0, PChar('TButton'), nil);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while ButtonHandle &lt;&gt; 0 do begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SendMessage(ButtonHandle, WM_SETTEXT, 0, Integer(pchar(IntToStr(I))));// 设置内容,看看我们找对了没有,好像这里的Integer也比较重要<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ButtonHandle := FindWindowEx(PanelHanlde, ButtonHandle, PChar('TPanel'), nil);// 寻找下一个Button,注意FindWindowEx的地二个参数,是ButtonHandle<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Inc(I);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br><br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PanelHanlde := FindWindowEx(FormHandle, PanelHanlde, PChar('TPanel'), nil);// 寻找下一个Panel,注意FindWindowEx的地二个参数,是PanelHandle<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br>end;<br>end.
 
多人接受答案了。
 
后退
顶部