FindWindowEx не находит элементов управления.

Тема в разделе "WASM.WIN32", создана пользователем ACF_muti1atoR, 7 июл 2005.

  1. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    Код (Text):
    1.  
    2.  *Wnd = FindWindow(0, "HCS");
    3.  
    4.    if (*Wnd != 0)
    5.    {
    6.       Application->MessageBoxA("Засечён окно.", "Ошибка!");
    7.    }
    8.  
    9.    *Wnd = FindWindowEx(Wnd, 0, 0, "GroupBox1");
    10.  
    11.    if (*Wnd != 0)
    12.    {
    13.       Application->MessageBoxA("Засечён бокс.", "Ошибка!");
    14.    }
    15.  
    16.    *Wnd = FindWindowEx(Wnd, 0, 0, "Memo1");
    17.  
    18.    if (*Wnd != 0)
    19.    {
    20.       Application->MessageBoxA("Засечён мемо.", "Ошибка!");
    21.    }
    22.  






    Вот и окно HCS он находит, а GroupBox1 и Memo1 не находит. Это я дурак или API ?
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    ACF_muti1atoR

    1. Не понятно, какого у тебя типа Wnd - HWND или HWND*.

    По идее должно быть так:
    Код (Text):
    1.  
    2. HWND hWnd = FindWindow(0, "HCS");
    3.  
    4.    if (hWnd)
    5.    {
    6.       Application->MessageBoxA("Засечён окно.", "Ошибка!");
    7.    }
    8.  
    9. HWND hCtrl = FindWindowEx(hWnd, 0, 0, "GroupBox1");
    10.  
    11.    if (hCtrl)
    12.    {
    13.       Application->MessageBoxA("Засечён бокс.", "Ошибка!");
    14.    }
    15.  
    16.    hCtrl = FindWindowEx(hCtrl, 0, 0, "Memo1");
    17.  
    18.    if (hCtrl)
    19.    {
    20.       Application->MessageBoxA("Засечён мемо.", "Ошибка!");
    21.    }
    22.  




    2. Разберись (с помощью Spy++), являются ли указанные контролы дочерними к HCS.
     
  3. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    HWND *Wnd;

    Контролы являються дочерними 8) потому что это моя программа.
     
  4. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    1. В таком случае ошибка здесь:

    FindWindowEx(Wnd, 0, 0, "GroupBox1");

    Смотри прототип, ты указатель (HWND*) передаешь вместо описателя (HWND).

    2. Надеюсь, перед присвоением твой указатель валиден. Лучше при этом сделать ссылку, и работать уже с ней:

    HWND &hWnd = *Wnd;
     
  5. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    да

    но если сделать FindWindowEx(*Wnd, 0, 0, "GroupBox1"); тоже ничего не работает.
     
  6. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Либо не находится окно HCS, либо заголовок групп-бокса не равен "GroupBox1" (возможно даже пустой).
     
  7. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    Да 8) я почему-то передавал последним параметром не заголовок элемента, а его имя (GroupBox1). И теперь написал туда заголовок груп-бокса - я его нашел, но вот Мемо я найти всё равно не могу, потому что у него нету заголовка в принципе., а по имени он его не находит.
     
  8. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    ACF_muti1atoR

    По оконному классу ищи, если нет других мемо. Если у тебя используется C++ Builder, класс скорее всего "TMemo". Класс контрола можно также узнать через Spy++.
     
  9. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    Блин ... а я искал класс Memo или Edit ... в винде же он именно Memo 8)) я не думал что билдер контролам меняет класс на свой TMemo.
     
  10. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    ACF_muti1atoR

    В user32 не зарезервированно вообще класса под мемо, это обычный multi-line "edit" контрол. Незнаю как в MFC.