Список элементов управления GUI Win

Тема в разделе "WASM.WIN32", создана пользователем skyproc, 20 дек 2011.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    как получить Список элементов управления GUI Win чужого процесса?

    Что до чужого так я приатачился, а как список получить я ХЗ.

    Вот так я получаю hWnd активного элемента управления

    Код (Text):
    1. call    GetForegroundWindow
    2. mov hxWnd,eax
    3.  
    4. push    0
    5. push    hxWnd
    6. call    GetWindowThreadProcessId
    7. mov xThreadId,eax
    8.  
    9.  
    10. call    GetCurrentThreadId
    11. mov CurThreadId,eax
    12.  
    13. push    1
    14. push    xThreadId
    15. push    CurThreadId
    16. call    AttachThreadInput
    17.  
    18. mov eax, sizeof GUITHREADINFO
    19. mov gti.cbSize,eax
    20.  
    21. push    offset gti
    22. push    xThreadId
    23. call    GetGUIThreadInfo
    24.  
    25. call    GetFocus
    26. mov hxEdit,eax
    27.  
    28.  
    29.  
    30. push    0
    31. push    xThreadId
    32. push    CurThreadId
    33. call    AttachThreadInput
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    EnumWindows + GetWindowThreadProcessId
     
  3. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Функция EnumWindows перечисляет все окна верхнего уровня, передавая текущий описатель окна Callback функции, определенной в приложении.


    Мне нужны hwnd кнопок едитов и прочей нечести
    этого мне получить с помощью EnumWindows не удаётся
     
  4. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    skyproc
    так потом их сравнивать на принадлежность к потокам данного процесса
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
  6. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Ну с этим понятно, мне вааще надо при нажатии горящих клавишь что вы прокручивался сайт в браузере.
    Перебираю все дочерние hWnd и вот что делаю в каллбэк функции

    Код (Text):
    1. EnumChildWindowsProc    proc
    2. push    ebp
    3. mov ebp,esp
    4.  
    5. ECWP_hwnd       equ dword ptr [ebp+08h]
    6. ECWP_lParam equ dword ptr [ebp+0Ch]
    7. pushad
    8. pushfd
    9.  
    10.  
    11.  
    12.  
    13. push    0
    14. push    SB_LINEDOWN
    15. push    EM_SCROLL
    16. push    ECWP_hwnd
    17. call    SendMessageA
    18.  
    19.  
    20.  
    21.  
    22. popfd
    23. popad
    24. leave
    25. ret 08h
    26. EnumChildWindowsProc    endp
    Прогрес бар должен смещаться на строку, но этого не происходит
     
  7. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    skyproc
    Сделай себе закладку в MSDN для "Functions by Category"
     
  8. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    А по делу есть чё нить?
     
  9. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    если ещё и хотите кнопки и т.п., то в браузере, вроде, это не кнопки:lol:
     
  10. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    в браузере это кнопки от самого браузера и никакие это не окна.
    skyproc
    взяли бы для начала Spy++ и посмотрели что в браузера одно окно и все остальное нарисовано им же (содержимое страницы), т.к. в ие, например кнопки сверху (всякие там настройки и т.п.) - это уже контролы виндоса.
     
  11. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Ясно
    Так можно ваще программно в браузере скрол бар прокрутить то?
     
  12. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    вот вы лазите по инету, крутите скрол чем? - мышаком, фокус где в тот момент? - на главном окне браузера.
    как заскролить тогда? - послать мессаги о скроле, видимо.
     
  13. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Ну тоесть вот так?

    Код (Text):
    1. call    GetForegroundWindow
    2. mov hWnd,eax
    3.  
    4. push    0
    5. push    SB_LINEDOWN
    6. push    EM_SCROLL
    7. push    hWnd
    8. call    SendMessageA
    Толку никакого!
     
  14. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    skyproc
    Spy++ возьмите (или WinSpy) и помониторте что отсылается браузеру когда мышкой и что когда вы сами...
     
  15. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    А всё свершилось всем спасибо!!!!

    Код (Text):
    1. push    0
    2. push    SB_LINEDOWN
    3. push    WM_VSCROLL
    4. push    hxWnd
    5. call    SendMessageA
     
  16. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    И ещё вопрос
    Можно ли используя
    Код (Text):
    1. call    SendMessage
    скролбар перемещать плавно
     
  17. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb787565%28v=vs.85%29.aspx
     
  18. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Ещё раз объясняю задачу.
    Необходимо программно изменять положение скролбара в браузере, в моём случае это FireFox.

    Вот этот код пашет:
    Код (Text):
    1. push    0
    2. push    SB_LINEDOWN
    3. push    WM_VSCROLL
    4. push    hxWnd
    5. call    SendMessageA
    Но перемещать то надо плавно!

    Есоли cresta имел ввиду вот это

    Код (Text):
    1. push    0
    2. push    10
    3. push    SBM_SETPOS
    4. push    hxWnd
    5. call    SendMessageA
    То так не пашет!

    В общем по ходу разные браузеры по разному обрабатывают сообщения для скролбара...
    С IE к примеру можно задать нужную позицию вот так

    Код (Text):
    1. push    0
    2. push    SB_THUMBPOSITION
    3. push    WM_VSCROLL
    4. push    hWnd
    5. call    SendMessageA
    Но что от этого толку если нельзя получить max и min положения.
     
  19. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    я имел ввиду вот это:
    Applications should not send this message directly. Instead, they should use the SetScrollPos function
     
  20. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Да знаю я это
    Код (Text):
    1. SetScrollPos
    Сие безобразие возвращает ошибку, GetlastError говорит что нету тут скролбара, hWnd принадлежит окну содержащему скролбар.

    В браузерах есть встроенная функция плавной прокрутки, я так полагаю она работает тоже через сообщения...
    Если да то как их узнать?
    А может есть и другие механизмы???