如何利用 Handle 找出該視窗下的所有元件
發表於 : 2008年 11月 27日, 17:50
可以利用 EnumChildWindows 來進行取得所有的 childwindow, 再配合 GetClassName 來取得其 classname, 以下為大約的寫法.
在 var 段加入 callback function:
function myEnumChildBack( h: HWND; v: integer ): Boolean; stdcall;
另外的程式如下:
在 var 段加入 callback function:
function myEnumChildBack( h: HWND; v: integer ): Boolean; stdcall;
另外的程式如下:
代碼: 選擇全部
procedure Tform1.Button1Click(Sender: TObject);
var
a: HWND;
begin
a := FindWindow(nil, 'my');
if a <> 0 then
EnumChildWindows(a, @myEnumChildBack, 0);
end;
function myEnumChildBack(h: HWND; v: integer): Boolean; stdcall; //定義 callback function 注意要用 stdcall
var
cname: array[0..255] of char;
begin
GetClassName(h, cname, 256);
form1.memo1.Lines.Add(inttostr(h) + ' ' + cname );
result := true;
end;
procedure Tform1.Button2Click(Sender: TObject); // 對照組
var
i: integer;
begin
for i:= 0 to self.ComponentCount - 1 do
begin
if Components[i] is TWinControl then
Memo2.Lines.Add(inttostr(TWinControl(Components[i]).Handle));
end;
end;