1、显示所有窗口的标题
2、根据关键字查询窗口
3、某一窗口内的所有控件及其内容
.
unit Unit1;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } procedure get_actrlh(h: hwnd); public { Public declarations } end;var Form1: TForm1; hi: integer;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var szText: array [0 .. 254] of char; hCurrentWindow: hwnd;begin memo1.Clear; hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow, @szText, 255) > 0 then Memo1.lines.Add(szText); hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); end;end;procedure TForm1.Button2Click(Sender: TObject);var szText: array [0 .. 254] of char; hCurrentWindow: hwnd;begin memo1.Clear; hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow, @szText, 255) > 0 then if pos('360', szText) <> 0 then // 这里指定某一窗口,可能有多个 Memo1.lines.Add(szText); hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); end;end;procedure TForm1.Button3Click(Sender: TObject);var szText: array [0 .. 254] of char; hCurrentWindow: hwnd;begin memo1.Clear; hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST); while hCurrentWindow <> 0 do begin if GetWindowText(hCurrentWindow, @szText, 255) > 0 then if pos('360安全浏览器', szText) <> 0 then // 这里指定某一窗口,可能有多个 begin Memo1.lines.Add(szText); hi := 0; get_actrlh(hCurrentWindow); // 获取窗口中的所有控件 end; hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT); end;end;function gettext(h: hwnd): string;var name: string; txtlen: integer;begin txtlen := sendmessage(h, wm_gettextlength, 0, 0) + 1; setlength(name, txtlen); sendmessage(h, wm_gettext, txtlen, LongInt(@name[1])); result := name;end;procedure TForm1.get_actrlh(h: hwnd);var s: Array [0 .. 255] of char;begin h := GetWindow(h, GW_child); while h > 0 do begin GetClassName(h, s, 256); begin Memo1.lines.Add(inttostr(hi) + ':' + s + ':' + trim(gettext(h))); end; hi := hi + 1; get_actrlh(h); h := GetWindow(h, GW_HWNDNEXT); end;end;end.