如何获得其他应用程序窗口中某个控件的句柄(100分)

  • 主题发起人 主题发起人 fxb
  • 开始时间 开始时间
F

fxb

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:在标题栏为“AAA”的应用程序中,有很多控件,其中在某个<br>GROUPBOX上有一个名为“确定”的按钮,如何获得该按钮的句柄。
 
先分析出窗体结构然后用findwindow或其他 参考例子<br>http://www.playicq.com/dispdocnew.php?id=16129
 
http://www.2ccc.com/article.asp?articleid=923<br>http://www.2ccc.com/article.asp?articleid=546
 
&nbsp;i:=FindWindow(nil, 'AAA');<br>&nbsp; j:=FindWindowEx(i, 0, 0, 'GroupBox1'); //GroupBox的Caption<br>&nbsp; k:=FindWindowEx(j, 0, 0, '确定');<br>
 
是的,一步一步找下去,标题或者类名
 
r<br>&nbsp; &nbsp;myhandle : THandle;//本地全局变量<br><br>function EnumerateChildWindows(hWnd: HWND; lParam: LPARAM): BOOL;stdcall;<br>var//枚举函数<br>&nbsp; windowCaption:array[0..254] of Char;<br>begin<br>&nbsp; GetWindowText(Hwnd,WindowCaption,255);<br>&nbsp; if WindowCaption ='确定' then<br>&nbsp; &nbsp; myhandle := hWnd;//找到的按钮句柄<br>&nbsp; Result:=true;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; Hnd : HWnd;<br>begin<br>&nbsp; Hnd := FindWindow( nil,'AAA');//找该程序窗体的句柄<br>&nbsp; if Hnd = 0 then exit;//没找到,退出<br>&nbsp; EnumChildWindows( Hnd, @EnumerateChildWindows, 0 );<br>&nbsp; showmessage(inttostr(myhandle));<br>end;<br>
 
如果不清楚有几层,可以用工具spy++打开看看,一步步找下去。不能跳着找。<br><br>spy++这个工具很不错的,建议多用用。<br>先用Findwindow找到父窗口。<br>然后用FindwindowEx找到这个父窗口下的控件句柄。<br>
 
对 我平时都是用 spy++ 的。
 
接受答案了.
 
后退
顶部