1、WinAPI: GetWindow - 获取与指定窗口具有指定关系的窗口的句柄//声明:GetWindow( hWnd: HWND; {指定的窗口句柄} uCmd: UINT {指定的关系选项}): HWND; {失败返回0; 成功返回符合的窗口句柄}//uCmd 可选值:GW_HWNDFIRST = 0; {同级别第一个}GW_HWNDLAST = 1; {同级别最后一个}GW_HWNDNEXT = 2; {同级别下一个}GW_HWNDPREV = 3; {同级别上一个}GW_OWNER = 4; {属主窗口}GW_CHILD = 5; {子窗口}--------------------------------------------------------------------------------{要有个 Memo 接受数据}procedure TForm1.Button1Click(Sender: TObject);var h: HWnd; p: array[0..254] of char;begin h := GetWindow(Handle, GW_HWNDFIRST); while h <> 0 do begin if GetWindowText(h, p, 255) > 0 then Memo1.Lines.Add(p); h := GetWindow(h, GW_HWNDNEXT); end;//-------------------------- 递归的过程procedure GetChildWindows(h: HWND);var buf: array[0..255] of Char; {这个缓冲区是获取类名用的, 如果不需要可以删除}begin h := GetWindow(h, GW_CHILD); {第一个子窗口} while h <> 0 do begin {下面两行是要执行的操作, 并假定只处理 TEdit} GetClassName(h, buf, Length(buf)); if buf = 'TEdit' then ShowMessageFmt('%s:%d', [buf, h]); h := GetWindow(h, GW_HWNDNEXT); {下一个子窗口} GetChildWindows(h); {递归} end;end;//-------------------------- 调用的方法procedure TForm1.Button1Click(Sender: TObject);begin GetChildWindows(Handle);end;