Невозможно найти дочернее окно родительского окна, у которого нет WindowName с ClassName # 32770 (Диалог) - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь получить hwnd дочернего окна (caption = "Reset") для применения в функции IsWindowVisible (), но дочернее окно не может быть найдено.

Это код:

#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;

}

Есть много окон с тем же именем класса # 32770 (диалог), также без заголовка. После запуска кода в результате появлялись разные типы окон (с такими именами классов, как WorkerW, IME и т. Д.).

Диаграмма дерева, полученная из Spy ++, выглядит следующим образом:

... Окно 00180726 "" # 32770 (диалоговое окно)

... Окно 001F0962 Кнопка "Сброс"

Я пытался найти дочернее окно, если заголовок окна и класс окна (# 32770) включены,это успешно.

Мой вопрос: Как найти дочернее окно (Сброс), если у нас нет определенного родительского окна? Я пытался применить EnumWindows, EnumChildWindows, FindWindows, FindWindowsEx в main (), но все еще не могу получить то, что ожидаю.

Заранее благодарим за любую помощь.

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете использовать WindowFromPoint , чтобы получить родительский диалог, если вы знаете его позицию, а затем вызвать EnumChildWindows, чтобы получить его дочерний элемент

...