1、显示所有窗口的标题
2、根据关键字查询窗口
3、某一窗口内的所有控件及其内容
.
unit Unit1;
interface
uses
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.