Как получить структуру чужого окна

Тема в разделе "Общие вопросы по С и С++", создана пользователем SaNn, 4 фев 2008.

  1. SaNn

    SaNn Гость

    Вообщем, есть чужое окно, HWND известен, нужно добраться до определённого элемента
    (например Edit) , НО в программе понатыкано панелей и из-за этого, с поиском возникают проблемы...
    Помогите плиз...
    PS: Пишите код пожалуста...
     
  2. gamecreator

    gamecreator Гость

    мм... надо найти hwnd элемента
     
  3. SaNn

    SaNn Гость

    Для: gamecreator

    Сам додумался или кто подсказал???

    Я сам знаю что нужно найти HWND объекта, но найти его не просто, потому что объект находиться на панели, панель на ещё одной панели, эта панель на панели, ..... ну а эта панель на форме. И ещё проблема в том, что это возможно не панель вовсе (я проверял найдёт ли прога объект класса TPanel, так не нашла не одной).

    Вот почему я хочу узнать как узнать структуру объекта на форме.
     
  4. tdr

    tdr Гость

    Тебе надо не ТПанель искать, а Окна (незнаю как у Борланда, а у М$ это класс CWnd) и проверять свойства этих окон (кнопка это или едит, или панель)

    Попробуй это:
    BOOL EnumChildWindows(
    HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
    );

    hWndParent
    [in] Handle to the parent window whose child windows are to be enumerated. If this parameter is NULL, this function is equivalent to EnumWindows.

    lpEnumFunc
    [in] Pointer to an application-defined callback function. For more information, see EnumChildProc.

    lParam
    [in] Specifies an application-defined value to be passed to the callback function.
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: SaNn
    Ты там свой Spy решил написать? В общем случае придется рекурсивно вызывать EnumChildWindows, про которую тебе уже сказал tdr
     
  6. SaNn

    SaNn Гость

    Для: European

    Это не Spy, а типа вспомогательной программы, для ещё одной программы.
    В общем для нубов. Друг попросил написать. Согласился только из-за то, что проект интересный.

    И ещё, можно немного по подробней рассказать про EnumChildWindow (Как его использовать, инфу я в инете найду).
     
  7. gamecreator

    gamecreator Гость

    попробуй Spy++ (утилита VC++)
     
  8. tdr

    tdr Гость

    Для: SaNn
    Да какие уж тут подробности...
    Все в МСДН есть. Создается три окна. При изменении размера главного окна перечислябтся дочерние окна и к ним применяется функция EnumChildProc
    Код (Text):
    #define ID_FIRSTCHILD 100
    #define ID_SECONDCHILD 101
    #define ID_THIRDCHILD 102

    LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    RECT rcClient;
    int i;

    switch(uMsg)
    {
    case WM_CREATE: // creating main window

    // Create three invisible child windows.

    for (i = 0; i < 3; i++)
    {
    CreateWindowEx(0,
    "ChildWClass",
    (LPCTSTR) NULL,
    WS_CHILD | WS_BORDER,
    0,0,0,0,
    hwnd,
    (HMENU) (int) (ID_FIRSTCHILD + i),
    hinst,
    NULL);
    }

    return 0;

    case WM_SIZE:  // main window changed size

    // Get the dimensions of the main window's client
    // area, and enumerate the child windows. Pass the
    // dimensions to the child windows during enumeration.

    GetClientRect(hwnd, &rcClient);
    EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient);
    return 0;

    // Process other messages.
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
    {
    LPRECT rcParent;
    int i, idChild;

    // Retrieve the child-window identifier. Use it to set the
    // position of the child window.

    idChild = GetWindowLong(hwndChild, GWL_ID);

    if (idChild == ID_FIRSTCHILD)
    i = 0;
    else if (idChild == ID_SECONDCHILD)
    i = 1;
    else
    i = 2;

    // Size and position the child window.

    rcParent = (LPRECT) lParam;
    MoveWindow(hwndChild,
    (rcParent->right / 3) * i,
    0,
    rcParent->right / 3,
    rcParent->bottom,
    TRUE);

    // Make sure the child window is visible.

    ShowWindow(hwndChild, SW_SHOW);

    return TRUE;
    }
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-gamecreator+5:02:2008, 19:46 -->
    <span class="vbquote">(gamecreator @ 5:02:2008, 19:46 )</span><!--QuoteEBegin-->попробуй Spy++ (утилита VC++)
    [snapback]96763" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А причем тут SPY?
     
  10. gamecreator

    gamecreator Гость

    ну чтобы узнать где искать тот элемент
     
  11. SaNn

    SaNn Гость

    Спасибо всем, особенно tdr всё нашёл!!
     
Загрузка...

Поделиться этой страницей