获取指定关系窗口句柄及枚举窗口句柄

2025-10-19 16:06:29

1、WinAPI: GetWindow - 获取与指定窗口具有指定关系的窗口的句柄//声明:GetWindow(  hWnd: HWND; {指定的窗口句柄}  uCmd: UINT  {指定的关系选项}): HWND;      {失败返回0; 成功返回符合的窗口句柄}

//uCmd 可选值:GW_HWNDFIRST = 0; {同级别第一个}GW_HWNDLAST  = 1; {同级别最后一个}GW_HWNDNEXT  = 2; {同级别下一个}GW_HWNDPREV  = 3; {同级别上一个}GW_OWNER     = 4; {属主窗口}GW_CHILD     = 5; {子窗口}

--------------------------------------------------------------------------------

{要有个 Memo 接受数据}procedure TForm1.Button1Click(Sender: TObject);var  h: HWnd;  p: array[0..254] of char;begin  h := GetWindow(Handle, GW_HWNDFIRST);  while h <> 0 do  begin    if GetWindowText(h, p, 255) > 0 then Memo1.Lines.Add(p);    h := GetWindow(h, GW_HWNDNEXT);  end;

//-------------------------- 递归的过程procedure GetChildWindows(h: HWND);var  buf: array[0..255] of Char;  {这个缓冲区是获取类名用的, 如果不需要可以删除}begin  h := GetWindow(h, GW_CHILD); {第一个子窗口}  while h <> 0 do  begin    {下面两行是要执行的操作, 并假定只处理 TEdit}    GetClassName(h, buf, Length(buf));    if buf = 'TEdit' then ShowMessageFmt('%s:%d', [buf, h]);

    h := GetWindow(h, GW_HWNDNEXT); {下一个子窗口}    GetChildWindows(h);             {递归}  end;end;

//-------------------------- 调用的方法

procedure TForm1.Button1Click(Sender: TObject);begin  GetChildWindows(Handle);end;

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢