Робота с чужыми окнами

Тема в разделе "WASM.WIN32", создана пользователем Qu!tM@n, 18 июл 2006.

  1. Qu!tM@n

    Qu!tM@n New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    4
    Помогите пожалуста!
    Мне надо программно нажать пункт меню в окне програмы ,которую я сам запускаю из своего приложения. И никак не получается .......
     
  2. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Найди ID меню, получи ID пункта меню и пошли ему сообщение
     
  3. Qu!tM@n

    Qu!tM@n New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    4
    Так я не могу получить даже хендл окна ,по ид просеса
     
  4. Qu!tM@n

    Qu!tM@n New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    4
    как роботать с EnumThreadWindows?
     
  5. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Раз ты его создал (процесс), следовательно есть все права доступа к нему.
    Выдели там память (VirtualAllocEx), создай поток(CreateRemoteThread), запиши туда код (через WriteProcessMemory) и загрузи с его помощью свою дллку (вызови там LoadLibrary), которая сделает все что надо и выгрузится. Если хочешь неодноразово выполнять действия с хендлами окон созданного процесса, создай именованную секцию (или маппинг) и скидывай туда перечень хендлов полученных из другого процесса.
    То есть, например такой код ():
    push "lld"
    push ".yra"
    push "rbil"
    push eax
    lea eax,[esp+4]
    push eax
    mov eax,LoadLibrary <--static address, similar in created and existed processes
    call eax
    pop eax
    add esp,10h
    ret
     
  6. Qu!tM@n

    Qu!tM@n New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    4
    Спасибо ,я уже до окна добрался. Теперь надо нажать менюшку. Как то...
     
  7. kosfz

    kosfz New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    45
    Адрес:
    Russia
    Qu!tM@n
    Вот держи пример нажатия пункта меню "справка->о программе" в regedit.
    Код (Text):
    1. .386
    2. .model  flat, stdcall
    3. option  casemap :none
    4.  
    5. include     ..\include\windows.inc
    6. include     ..\include\kernel32.inc
    7. include     ..\include\user32.inc
    8. includelib  ..\lib\kernel32.lib
    9. includelib  ..\lib\user32.lib
    10.  
    11. .data
    12. Caption     db  "Редактор реестра",0
    13.  
    14. .data?
    15. handle      dd  ?
    16. hmenu       dd  ?
    17.  
    18. .code
    19. start:
    20. invoke FindWindow, 0, addr Caption ; ищем окно с caption'ом Редактор реестра
    21. mov handle, eax
    22. invoke SendMessage, handle, WM_SYSCOMMAND, SC_RESTORE, 0 ; если свернут, то восстанавливаем
    23. invoke SetForegroundWindow, handle ; выводим на передний план
    24. invoke GetMenu, handle ;получаем дескриптор меню окна редактора реестра
    25. mov hmenu, eax
    26. invoke GetSubMenu, hmenu, 4 ; получаем дескриптор всплывающего меню
    27. mov hmenu, eax
    28. invoke GetMenuItemID, hmenu, 2 ; получаем идентификатор нужного пункта меню
    29. mov hmenu,eax
    30. invoke SendMessage, handle,WM_COMMAND,hmenu,0 ;посылаем сообщение
    31. invoke ExitProcess, 0 ;выходим
    32. end start
    Я думаю вопросов возникнуть не должно, но если появятся, то спрашивай. Да, если нужно не на асме, то скажи - напишу не на асме.
     
  8. driver_slave

    driver_slave New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2007
    Сообщения:
    19
    kosfz спасибо за код в asm.