假设我为其中一个进程设置了这个Window层次结构:
Main Window (class name: XYZ_Widget_1)
`- Child Window (class name: XYZ_Widget_0)
`- Child-Child Window (class name: XYZ_Renderer)
如何找到Child-Child Window
的HWND?
我尝试在FindWindow
类上使用XYZ_Renderer
Win32 API函数,但FindWindow
函数找不到子窗口。
然后我尝试使用FindWindow
查找成功的Main Window
,但之后使用FindWindowEx
只能查找Child Window
,因为Child-Child Window
不是孩子Main Window
。
我想我可以更深入一层并在Child Window
找到它后调用FindWindowEx。
但在我这样做之前,我想可能有一种简单的方法可以找到Child-Child Window
?
答案 0 :(得分:9)
您必须为要关闭的每个子级别调用FindWindowEx()
,将前一级别中找到的HWND
指定为父级,例如:
HWND hWnd = FindWindow("XYZ_Widget_1", NULL);
if (hWnd != NULL)
{
hWnd = FindWindowEx(hWnd, NULL, "XYZ_Widget_0", NULL);
if (hWnd != NULL)
{
hWnd = FindWindowEx(hWnd, NULL, "XYZ_Renderer", NULL);
// and so on...
}
}
没有简单的方法可以做到这一点。为了简化代码,您可以编写自己的函数,接受类/窗口名称的路径作为输入,循环遍历它,根据需要为每条腿调用FindWindow/Ex()
。
答案 1 :(得分:5)
调用EnumChildWindows
将父窗口传递为hwndParent
。您的窗口是类名等于XYZ_Renderer
的窗口。
如果子窗口创建了自己的子窗口, EnumChildWindows 也会枚举这些窗口。