Конференция "WinAPI" » Работа с компонентами стороннего приложения [D7, WinXP]
 
  • imprezident (29.05.09 01:36) [0]
    Добрый день!
    У меня такой вопрос:
    Необходимо написать программу, эмулирующую деятельность человека в клиентском окне онлайн приложения(по простому бот). Так вот, сама программа уже написана.Теперь необходимо что бы она эту самую эмуляцию производила(читала текст из поля оень похожего на мемо, вставляла свой в эдит, нажимала на кнопки). Пока вижу 2 решения:
    1 Полностью сэмулировать клиент, тоесть засниффить весь получаемый и передаваемый им траффик. Каким то образом привести его в читаемый вид(слабо представляю конечно, но думаю что он не открытым текстом идет). И работать уже с моей программой.
    2 Реальное эмулирование нажатий клавиш в существующем клиенте. С WinApi знаком слабо(даж не знаю что подключать нужно:)), но думаю что делать нужно через него. Почитал форум что нужно как-то вычленить заголовок(Handler) этого клиентского окна(у него могут быть дочерние окна) и затем уже через этот заголовок получать доступ к компонентам.
    Так вот, хотелось бы узнать, как это все делается, желательно общий алгоритм для начала. Ну и пример кода бы очень не помешал. Думаю что на форуме что-то подобное уже обсуждалось, но так как слабо понимаю, то ничего конкретного не нашел. Если не сложно, ткните носом :)
  • Сергей М. © (29.05.09 08:35) [1]

    > в клиентском окне онлайн приложения


    С чего ты взял, что это приложение дельфийское ?
  • imprezident (29.05.09 09:37) [2]
    Так оно и не дельфийское 100 %, а вот то оторое я пишу - оно на делфи.
  • Сергей М. © (29.05.09 09:41) [3]

    > Так оно и не дельфийское 100 %


    Так о каких же тогда "компонентах" может идти речь, если оно не дельфийское ?

    Визуальный контрол, видимый тобой в каком-то "чужом" окне и дельфийский визуальный компонент - это далеко не одно и то же.
  • imprezident (29.05.09 10:03) [4]
    Нууу... поэтому и пользуем ВинАпи. Правильно я думаю?
    Они же стандартны. И хеадеры имеют стандартный вид в Винде, если я все правильно понимаю. Вот как быть с самим, как ты говоришь, визуальным контролом. Неужели нет способа его прочитать? М б читать его из оперативы, как например делает многим мзвестная ArtMoney.
  • Сергей М. © (29.05.09 10:18) [5]

    > поэтому и пользуем ВинАпи. Правильно я думаю?


    Думаешь-то правильно, а вот обзываешь эти контролы "компонентами" неправильно.


    > Вот как быть с самим, как ты говоришь, визуальным контролом


    Для начала следует выяснить, имеет ли интересующий контрол собственное окно.
    Работу следует начинать с детального исследования "жертвы" средствами, например, утилиты SpyXX.exe из состава MS VisualStudio.
  • imprezident (29.05.09 19:16) [6]
    Тааак вот это уже очень интересно.
    Пол дня мучаю этот SpyXX. Кое-что стало понятно. Но появился миллион других вопросов.

    > Для начала следует выяснить, имеет ли интересующий контрол
    > собственное окно.
    >


    Если я навожу FindTool из SpyXX на нужные контролы, они обводятся рамкой и по ним выдается информация: имя окна, текст, класс, стиль и т. д. Из чего я сделал вывод, что интересующие контролы имеют каждый свое окно.
    Далее нам необходимо посмотреть какое сообщение идет при нужном нам действии с этим контролом и вставить все это в SendMessage(Handle,Message,wParam,lParam).
    Вроде бы все просто, но тут и возникают вопросы. По пунктам:
    1  Что такое wParam и lParam?
    2  Как нам программно распознать имя окна, ведь при перезапуске приложения оно постоянно меняется? И если я в программе вставлю имя которое мне выдал спай, то при повторном запуске ничего не заработает.
    3  Что дает стиль(style) окна?
    4  Можно ли по классу окна определить какие галочки выставлять в Message Group. Например: есть поле(которое напоминает мемо, по сути это чат), спай его определил как RichEdit20W. Я ставлю галку Edit Field. Но при появлении в нем нового текста спай выдает только сообщения перевода каретки на новую строку. Также есть кнопка класса AfxWnd42u. Но при отслеживании сообщений из группы Button она ничего не показывает
    5  Как читать тект из контрола предыдущего вопроса(RichEdit20W)?
    Заранее спасибо!
  • GanibalLector © (29.05.09 19:30) [7]
    >Что такое wParam и lParam?

    1) Параметры. Левый и правый. Можешь передавать в них что угодно (числа, структуры и т.д.)
    2) FindWindow,FindWindowEx
  • imprezident (29.05.09 19:41) [8]
    Ого, лучшим форум, который я видел)) GanibalLector ответил за 14 секунд!!!Спасибо

    > 1) Параметры. Левый и правый. Можешь передавать в них что
    > угодно (числа, структуры и т.д.)

    А можно ли в этих параметрах получать что-то. Я думаю через них и нужно получать текст из ричэдита.

    > 2) FindWindow,FindWindowEx

    А вот тут я совсем запутался. В чем разница между именем окна и дискриптором окна. Чтобы воспользоваться FindWindow, мне нужно имя окна, которое как раз меняется и которое мне нужно найти, так?
  • imprezident (29.05.09 19:49) [9]
    А нет, это были минуты :)
  • GanibalLector © (29.05.09 19:51) [10]
    > А можно ли в этих параметрах получать что-то. Я думаю через них и нужно получать текст из ричэдита.

    Можно. Но для твоих целей подойдет вариант послать окну(ричэдита) сообщение выделить все, затем скопировать все. Ну...и в буфере окажется желаемое.

    > В чем разница между именем окна и дискриптором окна.

    Ищешь(FindWindow) по имени(главную форму) получаешь хендл. Затем ищешь (FindWindowEx) далее, указывая хендл главной формы и имени новой. Опять получаешь хендл. Затем опять  FindWindowEx ... и т.д.

    Блин, ты бы посмотрел в книге или в инете. Все ж описано и примеров полно
  • GanibalLector © (29.05.09 19:56) [11]
    Кстати, попробуй Window Scanner ( http://s0m.narod.ru/iws.html) .
    Наиболее удобный из виденных мною. Очень удобный ;)

    Да и остальные утилитки заслуживают внимания.
  • imprezident (29.05.09 20:08) [12]
    Может посоветуешь какую нибудь книжицу. Просто не хочется прочитать первую попавшуюся в нете на 600 страниц, чтобы понять что книга г.. и все равно ниче не понятно.
  • imprezident (29.05.09 20:12) [13]
    Кстати, программа действительно очень интересная.
  • GanibalLector © (29.05.09 20:41) [14]
    2 imprezident

    Дж.Рихтер "Windows для профессионалов".
    Там целая глава посвещена сообщениям
  • Игорь Шевченко © (29.05.09 21:52) [15]
    Не надо читать Рихтера, надо читать Чарльза Петцольда, причем, для Windows 95 (если он с тех пор написал что-то про новые версии, то оно лучше). Книжку так по-моему и звать - "Программирование для Windows"
  • imprezident (29.05.09 22:41) [16]
    to GanibalLector
    Спасибо

    to Игорь Шевченко
    Скачал Петцольда. Слабо понял при чем здесь он. :) Обычная книга по программированию на С. А мне вроде нужно WinApi для Delpi. Есть там конечно немного про потоки и процессы, но быстренько пролистав, мне показалось, что ничего нового не узнаю. А почему Рихтера не читать? Я начал, а теперь боюс, вдруг нельзя :)))
  • GanibalLector © (29.05.09 23:02) [17]
    2 imprezident

    Кстати, в Рихтере тоже ни слова о Delphi. Но это WinApi...а оно одинаково, что для Си , что для Delphi. Привыкай ;)
  • Игорь Шевченко © (30.05.09 01:13) [18]
    imprezident   (29.05.09 22:41) [16]

    Рихтер в основном про потоки и процессы, а Петцольд больше про окна интерфейсные элементы в них.

    Прочитаешь и того и другого - будешь вдвое умней.
  • Германн © (30.05.09 01:27) [19]

    > imprezident   (29.05.09 22:41) [16]
    >
    > to Игорь Шевченко
    > Скачал Петцольда. Слабо понял при чем здесь он. :) Обычная
    > книга по программированию на С. А мне вроде нужно WinApi
    > для Delpi.

    А все книги по WinAPI, как правило, нм Си. И тут уж либо самострел, либо...
  • имя (03.09.09 21:11) [20]
    Удалено модератором
  • Ruzzz (06.09.09 16:56) [21]
    для эмуляции нажатий кнопки можно использовать модуль SendKeys32.pas (если нужно выложу) - находишь нужное окно черех FindWindow, устанавливаешь на него фокус и посылаешь нужные нажатия клавишь. Это не полное решение конечно, но возможно как часть решения пригодится.
  • brother © (07.09.09 04:50) [22]
    > для эмуляции нажатий кнопки можно использовать модуль SendKeys32.pas
    > (если нужно выложу)

    а вот это уже перебор...
  • imprezident (28.09.09 17:17) [23]
    Выкладывать наверное не стоит, а вот если бы на мыло кинуть - идеально! :)
  • Leonid Troyanovsky © (29.09.09 19:05) [24]

    > imprezident   (28.09.09 17:17) [23]

    > Выкладывать наверное не стоит, а вот если бы на мыло кинуть

    Вот как народ обленился.

    Могу извинить лишь неточным названием, видимо, имелся в виду
    бессмертный SndKeys32.pas by Ken Henderson.

    Любопытно, что разыскивая уточненные версии (бо, изначальная
    была просто торопливо портирована из 16 битной, и работала
    подобающе лишь в win95), я заглянул на http://forum.sources.ru
    и порадовался за Riply, ставшей в ряду достойных модератором.

    Оперились наши птенцы :)
    Саше - наши пожелания всяческих успехов!

    --
    Regards, LVT.
  • Германн © (29.09.09 19:39) [25]

    > и порадовался за Riply, ставшей в ряду достойных модератором.
    >
    >
    > Оперились наши птенцы :)
    > Саше - наши пожелания всяческих успехов!

    +1
 
Конференция "WinAPI" » Работа с компонентами стороннего приложения [D7, WinXP]
Есть новые Нет новых   [134433   +24][b:0][p:0.001]