как получить Список элементов управления GUI Win чужого процесса? Что до чужого так я приатачился, а как список получить я ХЗ. Вот так я получаю hWnd активного элемента управления Код (Text): call GetForegroundWindow mov hxWnd,eax push 0 push hxWnd call GetWindowThreadProcessId mov xThreadId,eax call GetCurrentThreadId mov CurThreadId,eax push 1 push xThreadId push CurThreadId call AttachThreadInput mov eax, sizeof GUITHREADINFO mov gti.cbSize,eax push offset gti push xThreadId call GetGUIThreadInfo call GetFocus mov hxEdit,eax push 0 push xThreadId push CurThreadId call AttachThreadInput
Функция EnumWindows перечисляет все окна верхнего уровня, передавая текущий описатель окна Callback функции, определенной в приложении. Мне нужны hwnd кнопок едитов и прочей нечести этого мне получить с помощью EnumWindows не удаётся
Ну с этим понятно, мне вааще надо при нажатии горящих клавишь что вы прокручивался сайт в браузере. Перебираю все дочерние hWnd и вот что делаю в каллбэк функции Код (Text): EnumChildWindowsProc proc push ebp mov ebp,esp ECWP_hwnd equ dword ptr [ebp+08h] ECWP_lParam equ dword ptr [ebp+0Ch] pushad pushfd push 0 push SB_LINEDOWN push EM_SCROLL push ECWP_hwnd call SendMessageA popfd popad leave ret 08h EnumChildWindowsProc endp Прогрес бар должен смещаться на строку, но этого не происходит
в браузере это кнопки от самого браузера и никакие это не окна. skyproc взяли бы для начала Spy++ и посмотрели что в браузера одно окно и все остальное нарисовано им же (содержимое страницы), т.к. в ие, например кнопки сверху (всякие там настройки и т.п.) - это уже контролы виндоса.
вот вы лазите по инету, крутите скрол чем? - мышаком, фокус где в тот момент? - на главном окне браузера. как заскролить тогда? - послать мессаги о скроле, видимо.
Ну тоесть вот так? Код (Text): call GetForegroundWindow mov hWnd,eax push 0 push SB_LINEDOWN push EM_SCROLL push hWnd call SendMessageA Толку никакого!
skyproc Spy++ возьмите (или WinSpy) и помониторте что отсылается браузеру когда мышкой и что когда вы сами...
А всё свершилось всем спасибо!!!! Код (Text): push 0 push SB_LINEDOWN push WM_VSCROLL push hxWnd call SendMessageA
Ещё раз объясняю задачу. Необходимо программно изменять положение скролбара в браузере, в моём случае это FireFox. Вот этот код пашет: Код (Text): push 0 push SB_LINEDOWN push WM_VSCROLL push hxWnd call SendMessageA Но перемещать то надо плавно! Есоли cresta имел ввиду вот это Код (Text): push 0 push 10 push SBM_SETPOS push hxWnd call SendMessageA То так не пашет! В общем по ходу разные браузеры по разному обрабатывают сообщения для скролбара... С IE к примеру можно задать нужную позицию вот так Код (Text): push 0 push SB_THUMBPOSITION push WM_VSCROLL push hWnd call SendMessageA Но что от этого толку если нельзя получить max и min положения.
я имел ввиду вот это: Applications should not send this message directly. Instead, they should use the SetScrollPos function
Да знаю я это Код (Text): SetScrollPos Сие безобразие возвращает ошибку, GetlastError говорит что нету тут скролбара, hWnd принадлежит окну содержащему скролбар. В браузерах есть встроенная функция плавной прокрутки, я так полагаю она работает тоже через сообщения... Если да то как их узнать? А может есть и другие механизмы???