ControlClick(button4)

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 19 дек 2010.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    'OK' - работает, 'Cancel' - работает, '&Effects...' - не работает.

    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2. section '.code' executable
    3. start:
    4.         invoke ShellExecute,NULL,NULL,'control.exe','desk.cpl,,2',NULL,SW_HIDE
    5.         invoke Sleep,500
    6.  
    7.         invoke FindWindow,'#32770','Display Properties'
    8.         ;mov [hWnd],eax - нужно ли хендл сейвить или так пойдёт?
    9.  
    10.         invoke FindWindowEx,eax,NULL,NULL,button
    11.         ;mov [bWnd],eax
    12.  
    13.         invoke SendMessage,eax,BM_CLICK,NULL,NULL
    14.         ;invoke SendMessage, [bWnd], WM_LBUTTONDOWN, 1, 0
    15.         ;invoke SendMessage, [bWnd], WM_LBUTTONUP, 1, 0
    16. exit:
    17.         invoke ExitProcess,NULL
    18.  
    19. section '.data' readable writable
    20.  
    21.         hWnd dd NULL
    22.         bWnd dd NULL
    23. ;        button db '&Effects...',NULL - не пашет!
    24.         button db 'Cancel',NULL
    Может быть с символом underline & какие-то проблемы возможны?
    Пробывал даже два амперсанда && не помогло. ))

    Вообще с SendMessage и WM_COMMAND ничего не понятно,
    ни коллличество параметров ни какие именно, каша какая-то в msdn.
    Всюду всё на Delphi и C с каким-то туманом, причём двойной клик вообще не уместен тут!
    Вообщем что-нибудь разъясните, как кнопки давить, пожалуйста!?
    :\

    Самое главное не понятно номер кнопки как указать, ведь текст может быть локализирован.
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    0) попробуйте без & имя указать
    1) пришлите скрин desk.cpl или хотя бы винду под которой пробуете
    если хэндл больше не нужен, то так пойдет (например для закрытия)
    2) возьмите spy++ (Microsoft) или WinSight32 (Borland) и посмотрите реальное имя это злосчастной кнопки
    3) а еще лучше контролировать параметры и значения переменных полученные в ходе выполнения программы.
    самым простым способом это делается через отладчик. Сложнее - получить имя найденного окна и вывести его MessageBox'ом
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Вообще было бы хорошо перезагружать "мягко" винду для применения различных изменений в реестре.
    Я зделал выгружатель explorer.exe, однако это результата не дало.
    Вчера увидел случайно такие параметры
    System Shutdown Reason Codes:
    SHTDN_REASON_MINOR_HOTFIX
    SHTDN_REASON_MINOR_SERVICEPACK
    SHTDN_REASON_MINOR_INSTALLATION
    Интересно это для чего? Или это просто чтоб в журнал записать...
    Было бы разумно еслиб _HOTFIX или _SERVICEPACK делал бы LogOff системы и возвращался бы в систему.
    Кстати иногда подобное происходит, скажем при нажатии на тот же аплет desk.cpl
    рабочий стол как будто бы перезагружается каким-то тайным образом. )
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    круто. теперь возьмите отладчик и посмотрите, что вам возвращает FindWindowEx
     
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    [​IMG]
    Ноль возвращает.
    Будто бы я знаю как пользоваться отладчиком...
    Ставлю New origin entrypoint here на загрузку модуля:
    push zzzz.00402000 ASCII "&Effects..."

    Перед вызовом FindWindowEx, жму Step Over...
    EAX=00000000

    Или не так?

    На самом деле если начать от загрузки rundll32, там вообще бред какой-то.
    Причём дебагер всегда кричит что у меня EP нестандартный.
    Вообщем никакой радости жизни.

    Блн, поставлю чтоль турбо дебаггер, может в нём будет счастье, сколько в олли смотрю
    ничего не доходит. Статьи лень читать, будет время почитаю потом, не сейчас.
    :dntknw:
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Semiono
    поставьте в программе (исходнике) перед исследуемой ее частью команду int3 и просто жмите после запуска отладчика на F9 пока не попадете на эту самую int3 потом F7 или F8 до нужного места в программе.
    Попробуйте сделать цикл в программе, который перечисляет все дочерние окна класса button
    invoke FindWindow,'#32770','Display Properties'
    mov ebx, eax
    xor eax, eax
    @@:
    invoke FindWindowEx,ebx,eax,'button',NULL
    test eax, eax
    jnz @b
    и посмотрите какие кнопки вообще есть на форме.
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    О! Спасиб!!!
    -----------
    А что нет возможности указать Button2 или Instance:2 итп?
    Какие ещё варианты бывают для работы с контролами?

    ID 118 - это постоянное число?

    SendMessage,[hWnd],WM_COMMAND,(0 shl 16) or IDOK,NULL типа...
     
  9. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Semiono
    Это вы шутите так про дебаггер? Вы уже по-моему давно тут вопросы по программированию задаёте... и что до сих поп оллю не осилили? Это первое, с чего стоит начинать....

    ЗЫ
    Или вы состоите в секте, которая предала анафеме дебаггер? (Есть тут такая...)

    По-моему, есть какая "мягкая" перезагрузка, если вызвать окошко по Alt+F4 и нажать перезагрузить удерживая клавишу ШИФТ.
    Как-то так....
     
  10. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Есть ли смысл OllyDbg 2.0 юзать? Помоему там анализ winapi более бедный выводится, неговоря уже об отсутствии плагинов. Однако не знаю, время идёт, когда нибудь всёравно все будут на нём сидеть.
    Я поставил себе v2.0 думал привыкать начну, заглядываю туда частенько и вижу фигу.
    Решил откатиться, вроде поболее инфы в первой версии выдаёт. Однако понятно что дело во мне.
    зы Из секты я похоже один только! А что GetLastError юзать недостаточно? :)
     
  11. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Semiono
    Вам уже по-моему Клерк объяснял, чем чревато юзать ГетЛастЕррор, повторять его не буду. И к моему сожалению я забыл где этот тред... и не помню сохранил ли я страничку Х(

    Я тоже предпочитаю юзать первую оллю. Вам, как юзающему фасм могу посоветовать юзать мой недо-плагин, который добавляет метки из фас файла в оллю. Либо можете потерпеть... один человек с этого форума пишет похожий плагин, но на фасме и гараздо более правильный + всякие мелкие радости.
     
  12. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Есть ещё одна заморочка с оллей, я иногда в winxp x64 сижу, вчера пробывал открывать оллю,
    что-то глючило! Я имею ввиду v1.10, потом причину нашёл в двух плагинах
    IO.dll и Ose.dll. Убрал их заработало! Потом начал эксперементировать, в итоге и с ними работает.
    Однако хоть стало ясно, что олли пашет в x64, я сначала думал дело в версии.
     
  13. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%\win64ax.inc'
    2. section '.code' executable
    3. start:
    4.         sub rsp,8*5
    5.  
    6.         mov rcx,5
    7. @@:
    8.         invoke FindWindow,'#32770','Warning'
    9.         test rax,rax
    10.         jnz @f
    11.         dec rcx
    12.         jz exit
    13.         invoke Sleep,100
    14.         jmp @r
    15. @@:
    16.         mov [hWnd],rax
    17.         invoke SendMessage,[hWnd],WM_COMMAND,IDNO,NULL
    18. exit:
    19.         invoke ExitProcess,NULL
    20.  
    21. section '.data' readable writable
    22.  
    23.         hWnd dq NULL
    как правило любой цыкл повисает в бесконечном лупе
    посути я перебрал тут всё, и параметры sub rsp,8*5 и толщину hWnd dd ?
    впрочем сам цикл не я придумал, но ведь очевидно же всё, почемуж не пашет?
    или всётаки не правильно?
    ----
    Кстати, я для таких целей изобрёл такую вещь - многократное повторение комманд с задержками,
    без всяких там условий и проверок напролом! )))
    Имхо работает хорошо! )))