4

假设我有一个用于其中一个进程的 Window 层次结构:

Main Window               (class name: XYZ_Widget_1)
`- Child Window           (class name: XYZ_Widget_0)
  `- Child-Child Window    (class name: XYZ_Renderer)

如何找到 的 HWND Child-Child Window

我尝试FindWindow在类上使用 Win32 API 函数,XYZ_Renderer但该FindWindow函数找不到子窗口。

然后我尝试使用FindWindowto find Main Window,它成功了,但之后使用FindWindowEx只能找到Child WindowasChild-Child Window不是Main Window.

我想我可以更深入一层并在找到 FindWindowEx 时调用Child Window它。

但在我这样做之前,我想也许有一种简单的方法可以找到Child-Child Window

4

2 回答 2

12

您必须调用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()根据需要循环调用每个分支。

于 2012-10-05T01:59:42.883 回答
5

调用EnumChildWindows将父窗口作为hwndParent. 您的窗口是类名等于的窗口XYZ_Renderer

文件指出:

如果子窗口创建了自己的子窗口,EnumChildWindows也会枚举这些窗口。

于 2012-10-05T08:49:06.507 回答