2013-02-12 59 views
1

我得到使用该代码的窗口句柄:找出一个窗口有一个子窗口

var h: THandle; 
... 
h := FindWindow('MozillaWindowClass', NIL); 

h是有效的(> 0)。

如何查看此窗口是否有任何子窗口?

我无法使用FindWindowEx(),因为它需要类名。

我想在这里完成的是找出MozillaWindowClass窗口是属于Thunderbird还是Firefox。它看起来像Thunderbird有一个MozillaWindowClass没有孩子,但Firefox不是,所以这将是一个快速找出方法。 (我无法使用CreateToolhelp32Snapshot()来了解进程名称,因为我的代码也需要在Windows 2000上运行)。

+4

不要相信最低版本的MSDN的最低要求,他们倾向于撒谎(放弃不支持的操作系统,但只有有时/为某些)。 [链接](http://support.microsoft.com/kb/830031)。从D2007的winapi文档:客户端:需要Windows Vista,Windows XP,Windows 2000 Professional,Windows Me,Windows 98或Windows 95.服务器:需要Windows Server“Longhorn”,Windows Server 2003或Windows 2000 Server。 – 2013-02-12 19:24:31

+2

MSDN文档会发生什么情况,当它们得到更新时,将从正在审阅的API主题中删除对MS不再支持的操作系统版本的任何引用。你需要的是2002年的MSDN DVD,如果你需要支持win2k,你可以使用它。 – 2013-02-12 19:26:29

+0

相关提示谢谢! – Casady 2013-02-12 19:28:47

回答

6

确定窗口是否有孩子的最简单方法是呼叫GetWindow通过GW_CHILD

function HasChildren(Window: HWND): Boolean; 
begin 
    Result := GetWindow(Window, GW_CHILD)<>0; 
end; 
+0

+1。应该有这个想法。 – 2013-02-12 19:20:27

+0

谢谢。奇迹般有效。 – Casady 2013-02-12 19:24:13

相关问题