1、显示所有窗口的标题
2、根据关键字查询窗口
3、某一窗口内的所有控件及其内容
.
unit Unit1;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;typeTForm1 = 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;varForm1: TForm1;hi: integer;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
varszText: array [0 .. 254] of char;hCurrentWindow: hwnd;
beginmemo1.Clear;hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);while hCurrentWindow <> 0 dobeginif GetWindowText(hCurrentWindow, @szText, 255) > 0 thenMemo1.lines.Add(szText);hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);end;end;procedure TForm1.Button2Click(Sender: TObject);
varszText: array [0 .. 254] of char;hCurrentWindow: hwnd;
beginmemo1.Clear;hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);while hCurrentWindow <> 0 dobeginif GetWindowText(hCurrentWindow, @szText, 255) > 0 thenif pos('360', szText) <> 0 then // 这里指定某一窗口,可能有多个Memo1.lines.Add(szText);hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);end;end;procedure TForm1.Button3Click(Sender: TObject);
varszText: array [0 .. 254] of char;hCurrentWindow: hwnd;
beginmemo1.Clear;hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);while hCurrentWindow <> 0 dobeginif GetWindowText(hCurrentWindow, @szText, 255) > 0 thenif pos('360安全浏览器', szText) <> 0 then // 这里指定某一窗口,可能有多个beginMemo1.lines.Add(szText);hi := 0;get_actrlh(hCurrentWindow); // 获取窗口中的所有控件end;hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);end;
end;function gettext(h: hwnd): string;
varname: string;txtlen: integer;begintxtlen := 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);
vars: Array [0 .. 255] of char;
beginh := GetWindow(h, GW_child);while h > 0 dobeginGetClassName(h, s, 256);beginMemo1.lines.Add(inttostr(hi) + ':' + s + ':' + trim(gettext(h)));end;hi := hi + 1;get_actrlh(h);h := GetWindow(h, GW_HWNDNEXT);end;
end;end.