//声明: GetWindow( hWnd: HWND; {指定的窗口句柄} uCmd: UINT {指定的关系选项} ): HWND; {失败返回0; 成功返回符合的窗口句柄} //uCmd 可选值: GW_HWNDFIRST = 0; {同级别 Z 序最上} GW_HWNDLAST = 1; {同级别 Z 序最下} GW_HWNDNEXT = 2; {同级别 Z 序之下} GW_HWNDPREV = 3; {同级别 Z 序之上} GW_OWNER = 4; {属主窗口} GW_CHILD = 5; {子窗口中的最上}
枚举当前所有窗口
回复 maxcool 的问题:
{要有个 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; end;
WinAPI: GetTopWindow - 获取指定窗口的子窗口中最顶层的窗口句柄
//声明: GetTopWindow( hWnd: HWND; {指定的窗口句柄} ): HWND; {失败返回0; 成功返回最顶层的子窗口句柄}
这和用 GetWindow 函数使用 GW_CHILD 参数时应该是一样的, 测试一下:
var h1,h2: HWND; begin h1 := GetTopWindow(GetDesktopWindow); h2 := GetWindow(GetDesktopWindow, GW_CHILD); ShowMessage(Format('%d,%d',[h1,h2])); {132540,132540} end;
WinAPI: GetNextWindow - 获取指定窗口Z上或Z下的窗口的句柄
//声明: GetNextWindow( hWnd: HWND; {指定的窗口句柄} uCmd: UINT {指定的关系选项} ): HWND; {失败返回0; 成功返回符合的窗口句柄} //uCmd 可选值: GW_HWNDNEXT = 2; {同级别 Z 序之下} GW_HWNDPREV = 3; {同级别 Z 序之上}
转载于:https://blog.51cto.com/laokaddk/204379