//声明:
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 序之上}