1 頁 (共 1 頁)

如何利用 Handle 找出該視窗下的所有元件

發表於 : 2008年 11月 27日, 17:50
tim
可以利用 EnumChildWindows 來進行取得所有的 childwindow, 再配合 GetClassName 來取得其 classname, 以下為大約的寫法.

在 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;