无法找到没有 WindowName 和 ClassName 的 child window 的 parent window #32770(对话框)

Unable to find child window of a parent window that don't have WindowName with ClassName #32770 (Dialog)

我正在尝试获取 child window(caption = "Reset") 的 hwnd 以应用于 IsWindowVisible() 函数,但是 child window 找不到。

这是代码:

#include <iostream>
#include <windows.h>
using namespace std;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{

    char class_name[100];
    char title[100];
    GetClassNameA(hwnd,class_name, sizeof(class_name));
    GetWindowTextA(hwnd,title,sizeof(title));
    cout <<"Window title: "<<title<<endl;
    cout <<"Class name  : "<<class_name<<endl;
    cout <<"hwnd        : " <<hwnd<<endl<<endl;

    return TRUE;
}


int main()
{
    HWND hwnd = ::FindWindowA("#32770",NULL);

    EnumChildWindows(hwnd,EnumWindowsProc,0);

    system("PAUSE");

    return 0;

}

有很多 window 具有相同的 class 名称 #32770(对话),也没有标题。 运行代码后,结果出来了不同类型的window(class名称如WorkerW,IME等)。

从Spy++得到的树状图是这样的:

...Window 00180726 "" #32770(对话框)

...Window 001F0962 "Reset" 按钮

我试图找到 child window 如果包含 window 标题和 window class(#32770),它成功了。

我的问题是:如果我们没有特定的 parent window,如何找到 child window(重置)?我尝试在 main() 中应用 EnumWindows、EnumChildWindows、FindWindows、FindWindowsEx 但仍然无法得到我期望的结果。

预先感谢您提供的任何帮助。

如果您知道其位置,则可以使用 WindowFromPoint 获取父对话框,然后调用 EnumChildWindows 获取其子对话框