假设我有一个进程的窗口层次结构:
我该如何找到“子-子窗口”的HWND?
我尝试在XYZ_Renderer类上使用FindWindow Win32 API函数,但FindWindow函数无法查找子窗口。
然后我尝试使用FindWindow查找“主窗口”,成功了,但是之后使用FindWindowEx只能找到Child Window,而“子-子窗口”不是“主窗口”的子级。
我想也许我可以深入一层,在找到“Child Window”后调用FindWindowEx。
但在这之前,我想知道是否有一种简单的方法来找到“子-子窗口”?
假设我有一个进程的窗口层次结构:
Main Window (class name: XYZ_Widget_1)
`- Child Window (class name: XYZ_Widget_0)
`- Child-Child Window (class name: XYZ_Renderer)
我该如何找到“子-子窗口”的HWND?
我尝试在XYZ_Renderer类上使用FindWindow Win32 API函数,但FindWindow函数无法查找子窗口。
然后我尝试使用FindWindow查找“主窗口”,成功了,但是之后使用FindWindowEx只能找到Child Window,而“子-子窗口”不是“主窗口”的子级。
我想也许我可以深入一层,在找到“Child Window”后调用FindWindowEx。
但在这之前,我想知道是否有一种简单的方法来找到“子-子窗口”?
EnumChildWindows
,它将无法找到XYZ_Renderer
,因为XYZ_Renderer
不是顶层窗口的子级。它是XYZ_Widget_0
的子级...(请参见我的图表) - bodacydoEnumChildWindows
递归地遍历子窗口。它会找到所有子窗口,它们的子窗口等等。我再重申一遍,EnumChildWindows
找到的是所有子窗口,而不仅仅是直接的子窗口。Raymond 在这篇文章中讨论了这个问题:http://blogs.msdn.com/b/oldnewthing/archive/2007/01/16/1478717.aspx - David HeffernanEnumChildWindows()
确实像宣传的那样工作,至少在Win7上是这样。它真正枚举了直接子窗口和后代窗口。我创建了一个带有一堆嵌套控件的VCL表单,然后只调用一次带有表单Handle
作为父窗口的EnumChildWindows()
函数。它确实递归遍历了所有嵌套控件。 - Remy Lebeau