bod*_*ydo 4 api winapi findwindow findwindowex
假设我为其中一个进程设置了这个Window层次结构:
Main Window (class name: XYZ_Widget_1)
`- Child Window (class name: XYZ_Widget_0)
`- Child-Child Window (class name: XYZ_Renderer)
Run Code Online (Sandbox Code Playgroud)
我如何找到HWND Child-Child Window?
我尝试FindWindow在XYZ_Renderer类上使用Win32 API函数,但该FindWindow函数找不到子窗口.
然后我试图使用FindWindow发现Main Window,它成功了,但使用后FindWindowEx只能找到Child Window作为Child-Child Window是不是一个孩子Main Window.
我想我可以更深入一层并在Child Window找到它之后调用FindWindowEx .
但在我这样做之前,我想可能有一个简单的方法可以找到Child-Child Window?
您必须为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...
}
}
Run Code Online (Sandbox Code Playgroud)
没有简单的方法可以做到这一点.为了简化代码,您可以编写自己的函数,接受类/窗口名称的路径作为输入,循环遍历它FindWindow/Ex(),根据需要调用每个分支.
调用EnumChildWindows传递父窗口为hwndParent.您的窗口是类名等于的窗口XYZ_Renderer.
该文件指出:
如果子窗口创建了自己的子窗口,EnumChildWindows也会枚举这些窗口.