программный ввод текста чужому окну

Тема в разделе "WASM.WIN32", создана пользователем warsem, 20 сен 2007.

  1. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Лирика: сто лет не асмил.
    Задача: есть окно, у которого имеется поля для ввода текста. Но там стоит счетчик на ввод. Хочу написать прогу, которая будет вставлять текст сама в это окно.
    План действий:
    * нахожу хендл окна
    * нахожу по нему хендл поля
    * юзаю что-то чтобы вставить туда текст
    Проблемы:
    * какой асм лучше юзать под винХП(юзал раньше тасм32 под 98)?
    * как найти хендл поля для ввода?
    * как зная хендл вставить текст?
    P.S.: не исключаю, что я размечтался и все не так просто.
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    тот же
    FindWindow(Ex)
    SendMessage
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    FASM MASM
    FindWindow, FindWindowEx
    SendMessage(hWnd, WM_SETTEXT, 0, lpBuf)
     
  4. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    спасибо вам.
    Поглядел в win32.hlp.
    Вроде пока все понятно. Но думаю во время написания появятся вопросы.
     
  5. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Разве можно вот просто так с SendMessage вставить в чузое окно текст?
     
  6. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Запросто.

    Если известно хвнд окна.
     
  7. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Если все в пределах одного декстопа, то просто
     
  8. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Предположим исследуемая программа пишет в окно текст с адреса 0x401000. Мы хотим поместить туда другую строку, которая в нашей программе тоже по адресу 0x401000. Какая строка из двух окажется в окне после SendMessage? IMHO без VirtualAlloc/WriteProcessMemory не обойтись.
     
  9. lamer2k

    lamer2k New Member

    Публикаций:
    0
    Регистрация:
    14 май 2006
    Сообщения:
    88
    уууу... тебе без Рихтера не обойтись... В условии задачи 2 ненужных параметра. SendMessage абсолютно побоку какие офсеты у чужой программы и тем более у твоей.

    SendMessage(FindWindowEx(hWnd, 0, "Edit", 0), WM_SETTEXT, 0, lpszYouText);
     
  10. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    dr_dred
    Начнем с того, что оконная подсистема была натянута на NT без каких-либо заморочек с безопасностью, так что, зная хэндл окна более привелигированного приложения можно творить с ним все что душе угодно. Менять текст в том числе.
    Обойтись. Дело в том, что глобальная ядерная таблица окон спроецирована на АП всех процессов в режиме read-only, так что меняя что-то окну другого приложения нам не нужно вылазить за пределы своего АП.
     
  11. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    можно, если родительское окно не имеет стиля DS_LOCALEDIT и не выделяет память для эдита в своей внутренней памяти процесса.
    ----
    по умолчанию память для эдита выделяется в глобальной области для совместимости со старыми версиями винды, так что этот метод работает.
     
  12. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Был неправ, вспылил:)
     
  13. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    shoo
    Вы, конечно, учли, что "Applies to 16-bit applications only", и просто держите наготове 16-bit пример ? :)
     
  14. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    Облом у меня.
    Сначала думал делаю чет не то. А на пятые сутки дошло, что окно дочернее.
    отсюда опять вопрос. Все ли так, как я себе представляю:
    1. ищем хэндел процесса
    2. берем у него хэндел окна
    3. ну и дальше уже хэндел поля ввода и SendMessege

    если все так, просьба подсказать чем перебирать окна у процесса и чем перебирать процессы. Помню чем-то 3 года назад перебирал запущенные процессы(функция была похожа на ту, что с поиском файлов:FindFirst/NextFile)

    ну и поскольку уверен в отзывчивости местных жителей уже говорю "Cпасибо" ))
     
  15. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Сначала hSnapshot = CreateToolHelp32Snapshot (TH32CS_SNAPTHREAD, NULL)
    Потом Thread32First / Thread32Next (hSnapshot, &THREADENTRY32)
    Далее EnumThreadWindows (THREADENTRY32.dw32ThreadId, &EnumThreadWndProc, lParam)
    и EnumChildWindows (hWndParent, &EnumChildWndProc, lParam)
     
  16. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    каюсь: прозевал-с :)
     
  17. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    А как узнать, какие окна в данный момент есть на экране?
     
  18. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Lex2029
    EnumWindows
     
  19. Lex2029

    Lex2029 New Member

    Публикаций:
    0
    Регистрация:
    17 сен 2007
    Сообщения:
    199
    А можно еще вопрос, не совсем по теме :) Но на примере этой темы.
    Вот есть у меня МСДН полный. Англ я знаю выше среднего. Как мне выйти на EnumWindows с нуля?
     
  20. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Lex2029
    Platform SDK Documentation --> Searh --> Look for
    Можно так --> Contens --> Windows API --> Overviewe of the Windows API --> Function by Category --> Window