1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

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

  1. SaNn

    SaNn Гость

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

    gamecreator Гость

    Репутация:
    0
    мм... надо найти hwnd элемента
     
  3. SaNn

    SaNn Гость

    Репутация:
    0
    Для: gamecreator

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

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

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

    tdr Гость

    Репутация:
    0
    Тебе надо не ТПанель искать, а Окна (незнаю как у Борланда, а у М$ это класс 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

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

    SaNn Гость

    Репутация:
    0
    Для: European

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

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

    gamecreator Гость

    Репутация:
    0
    попробуй Spy++ (утилита VC++)
     
  8. tdr

    tdr Гость

    Репутация:
    0
    Для: SaNn
    Да какие уж тут подробности...
    Все в МСДН есть. Создается три окна. При изменении размера главного окна перечислябтся дочерние окна и к ним применяется функция EnumChildProc
    Код:
    #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

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    <!--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 Гость

    Репутация:
    0
    ну чтобы узнать где искать тот элемент
     
  11. SaNn

    SaNn Гость

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

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