Нажать кнопку на другом окне

Тема в разделе "WASM.BEGINNERS", создана пользователем REALiSTiC, 28 апр 2007.

  1. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Все никак не пойму как отметить галочку или нажа кнопку на другом окне.

    Знаю, что нужно использовать FindWindow... Знаю, что можно делать SendMessage (например закрыть окно)...

    Есть окно с заголовком "Превед кроссафчег", на окне кнопка Закрыть и галочка с названием "Завершить процесс". Как можно нажать кнопку и отметить галочку ???

    Просьба не отправлять на MSDN и не писать просто названия функций...

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include    windows.inc
    6.  
    7. include    kernel32.inc
    8. includelib kernel32.lib
    9. include    user32.inc
    10. includelib user32.lib
    11.  
    12. .data
    13. lpWindowName db "Превед кроссафчег",0
    14.  
    15. .data?
    16. hWnd HWND ?
    17.  
    18. .code
    19. start:
    20. invoke FindWindow,0,addr lpWindowName
    21. mov hWnd,eax
    22. invoke SendMessage,hWnd,WM_SYSCOMMAND,SC_CLOSE,0
    23. invoke ExitProcess,0
    24. end start
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Какое окно. Ты о чём?
    Родителя или дочернее?
     
  3. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    S_Alex, а фиг знает :)

    Окно независимое, другого приложения...
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Сначала получаешь хендлы обеих кнопок (checkbox и pushbutton) одним из способов, которые найдешь на форуме или в гугле.
    Потом отправляешь первой SendMessage(..., BM_SETCHECK, ...) и второй - SendMessage(..., BM_CLICK, ...)
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Найди хендлы родителя. А потом нужно перебрать все дочерние окна (КНОПКИ и всякая другая е...).
    Можно отправить WM_SETWINDOWTEXT (короче поменять заголовок окна) на кнопке выскочит надпись.
    Я делал так:
    В каждое дочернее окно отправлял строку с хендлом самого окна. Тут и сразу видно что и где почем.
    А еще проще запустить ТУЗЛУ которая мониторит все окна под курсором и выводит ХЕНДЛЫ и пр. ерунду и тд. и т.п. ...
    Привет!
     
  6. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    У меня есть WindowFinder... Выводит счисла типа 000a06b4, но вроде они разные каждый раз ((

    Покажите рабочий исходник :)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    окна кнопок спокойно ищутся либо через FindWindow, либо через перечисление дочерних окон окна программы через EnumChildWindows

    а потом SendMessage( ) и все дела
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Отправляйся на MSDN.
     
  9. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    MSDN у меня на компе есть :p

    Работает, но почему-то только после второго нажатия. Что делать??

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include    windows.inc
    6.  
    7. include    kernel32.inc
    8. includelib kernel32.lib
    9. include    user32.inc
    10. includelib user32.lib
    11.  
    12. .data
    13. lpWindowName db "Îøèáêà ïðèëîæåíèÿ",0
    14. lpszClass    db "Button",0
    15. lpszWindow   db "ÎÊ",0
    16.  
    17. .data?
    18. hwndParent HWND ?
    19. hwndChild  HWND ?
    20.  
    21. .code
    22. start:
    23. invoke FindWindow,0,addr lpWindowName
    24. mov hwndParent,eax
    25. invoke FindWindowEx,hwndParent,0,addr lpszClass,addr lpszWindow
    26. mov hwndChild,eax
    27. invoke SendMessage,hwndChild,BM_CLICK,0,0
    28. invoke ExitProcess,0
    29. end start
     
  10. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Я запускаю первый раз, кнопка выделяется, второй раз нажимается...
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    REALiSTiC
    MSDN у меня на компе есть ...
    Например, MSDN BM_CLICK Message: "If the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before sending the BM_CLICK message to the button."
     
  12. REALiSTiC

    REALiSTiC New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    33
    Как по-даунски это все сделано. Спасиба))
     
  13. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
    Аналогичная проблема, только надо нажеть не кнопку, а тулбар, и в чужой проге.
    Посылал сообщение WM_LBUTTONDOWN/UP тулбару на нужную координату - ноль на массу; SetActivateWindow игнорируется естественно, WM_ACTIVATE с WA_ACTIVE/WA_CLICKACTIVE также(посылал как родительскому окну так и тулбару).
    Прога куда надо кликать написана на VB5.
    Благодарен за любые подсказки.
     
  14. russianbil

    russianbil New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2008
    Сообщения:
    8
    Что это за утилита?
     
  15. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
    winspy, spyxxx