Программно нажать на кнопку

Тема в разделе "WASM.BEGINNERS", создана пользователем ActioN, 17 июл 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Как программно нажать на кнопку в своей программе? Скорее всего надо отослать ей сообщение.

    Только с какими параметрами?

    invoke SendMessage,hwndbutton1,BN_CLICKED,button1ID,1



    Модератору: Приношу извинения за создание 2-х одинаковых тем, похоже у меня глюки с броузером. Если не сложно удалите эту тему пожалуйста и переместите в раздел WASM Win32 остальные 3 темы, созданные мной. Спасибо.
     
  2. rmn

    rmn Well-Known Member

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




    А почему не в BEGINNERS ?
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    у меня в phck3 этот вопрос рассмотрен подробно
     
  4. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    kaspersky, а подробнее можно. Что такое phck3?

    rmn, подумал что это уже не новичковский вопрос.
     
  5. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    ActioN

    Зря подумал :)

    Есть ведь справочник по АПИ, там вроде пишут кое-чего. MSDN зовется.
     
  6. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    n0p, MSDN большой. Аббревиатуру непонял - phck3. И поиск тоже ничего не дал. А если искать ответ на вопрос как нажать кнопку, что тогда в строку поиска вводить?:)
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Можно родителю кнопки послать WM_COMMAND, соответствующим образом оформив сопутствующие сообщению wParam и lParam. Родитель подумает, что нажата кнопка и среагирует так же, как и на нажатие, только ничего нажиматься не будет
     
  8. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Спасибо, разобрался.

    cresta, так и сделал - послал сообщение окну.
     
  9. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    а как програмно нажать на кнопку ОК в совсем дугом окне

    известно лишь имя родительского процесса и имя окна.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    WM_COMMAND + IDOK
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    окно находишь через FindWindow например
     
  12. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    2IceStudent

    ну найти я могу

    вот

    Target byte 'Notepad', 0



    invoke FindWindow, addr Target, 0



    а как найти IDOK?
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    На 100% не уверен насчёт поиска, но если так, то
    Код (Text):
    1.  
    2. invoke FindWindow,addr Target,0
    3. invoke SendMessage,eax,WM_COMMAND,BN_CLICKED shl 16 + IDOK,0
     
  14. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    нет не вышло.

    invoke SendMessage,eax,WM_COMMAND,BN_CLICKED shl 16 + IDOK,0

    вместо lParam недолжен быть 0 а должен быть хэндл кнопки

    ОК.так сказала утилита SPY++ =)

    но это тоже не прокатило.

    что делать?
     
  15. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Надпись (caption) есть у кнопки? Если есть, то FindWindowEx, или EnumChildWindows + callback, в котором сравнивать caption предлагаемых тебе child hwnd с тем caption, который у тебя есть. Как совпадёт - значит hwnd кнопки у тебя в руках.

    Тогда и посылай ей своё сообщение.
     
  16. rmn

    rmn Well-Known Member

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



    Если FindWindow находит кнопку, пошли ей WM_LBUTTONDOWN, WM_LBUTTONUP.
     
  17. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    2cresta

    ну написал

    szCaption byte 'OK', 0

    invoke FindWindowEx, addr szTarget, addr szCaption, 0, 0



    а потом какое сообщения посылать ему?WM_COMMAND?
     
  18. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    rmn





    FindWindow не ищет дочерние окна (в т.ч. кнопки).



    ror


    Код (Text):
    1. hParent     dd ?
    2. hButton     dd ?
    3. ButtID      dd ?
    4.  
    5. Target      db <заголовок окна-родителя кнопки>, 0
    6. ButtCaption db <надпись на кнопке>, 0
    7. ButtClass   db 'button',0
    8.  
    9. invoke    FindWindow, NULL, addr Target      ;ищем хэндл родителя
    10. mov       hParent,eax
    11. invoke    FindWindowEx, hParent, NULL, addr ButtClass, addr ButtCaption      ;ищем хэндл кнопки
    12. .if (eax)
    13.     mov   hButton,eax              ;хэндл кнопки
    14.     invoke GetDlgCtrlID, hButton  
    15.     mov   ButtID,eax               ;ID кнопки
    16.     invoke SendMessage, hParent, WM_COMMAND, ButtID, hButton
    17. .endif
     
  19. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    cresta

    болшое спасибо. то что нужно.

    не мог найти эту функцию GetDlgCtrlID.
     
  20. ror

    ror New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    7
    cresta

    извини, но опять возникла проблема.

    если заголовок на русском то FindWindow не находит его.

    FindWindowW тоже непомог.