枚举窗口的有关问题

枚举窗口的问题
本帖最后由 baiylhnh 于 2013-01-19 21:03:07 编辑
注释的地方请帮我解答一下..详细详细!!!枚举窗口的有关问题

procedure TForm1.Button1Click(Sender: TObject);

const
classname = 'WordPadClass'; {指定类名}
var
h: hwnd;
buf: array[byte] of char;//为什么要用数组?而且还是char.char不是只能放一个字符么,为什么不用字符串

begin    //程序开始
i:=0;
memo1.Lines.Clear;
h := getwindow(handle, gw_hwndfirst);  //他获取的是第一个获取到的窗口?返回的是第一个窗口的句柄?
while h <> 0 do
begin
getclassname(h, buf, length(buf)); 
if buf = classname then 
begin

getwindowtext(h, buf, length(buf)); 
memo1.lines.add(buf)
end;
h := getwindow(h, gw_hwndnext);    
 //为什么要加这句.为什么第一个参数是H?与第一个getwindow有什么联系
end;

end;


end.

------解决方案--------------------
你的代码的作用是将所有类名为WordPadClass的窗口的标题列出来。

1.buf: array[byte] of char;//为什么要用数组?而且还是char.char不是只能放一个字符么,为什么不用字符串
getclassname(h, buf, length(buf)); 第二个传进去的是一个指针,所以要用Char数组或者PChar;
2.h := getwindow(handle, gw_hwndfirst);  //他获取的是第一个获取到的窗口?返回的是第一个窗口的句柄?
这里获取的是同Z级的第一个窗口句柄;

3.h := getwindow(h, gw_hwndnext);    
 //为什么要加这句.为什么第一个参数是H?与第一个getwindow有什么联系
这里是取H的下个同Z级窗口句柄


参考下GetWindow的用法:http://www.xuedelphi.cn/article/html2010/2009011719595067.html
//声明:
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; {子窗口中的最上}
[本文来自: 学Delphi网(http://www.xuedelphi.com/) ]详细出处参考:http://www.xuedelphi.cn/article/html2010/2009011719595067.html