Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Знатокам Win32 GDI (хочу странного - hook на gdi)   Найти похожие ветки 

 
Ihor Osov'yak ©   (2002-10-07 12:04) [0]

В общем стоит задача получить любой текст с любого виндовс окна.

Понятно, WM_GetText пролетает. После некоторого изыскания пришел к выводу, что иного решения, чем перехват вызовов
DrawText, DrawTextEx, TextOut, ExtTextOut, TabbedTextOut не существует. Есть уже первые обнадеживающие результаты. Но обнаружил, что не весь текст с помощью этих хуков перехватывается. В часности не ловлю текст от какого-то навороченого грида, класс которого
spy++ определяет как AfxWnd42 ...

Так вот вотрос, какие апишные вызовы могут использоватся для вывода текста, кроме вышеперечисленых?


PS. Есть такой утиль - SnigIt - так он с этой задачей справляется. Но он, кстати текста с делфийского лейбла не вытягивает. А вот методом хука мне его удается получить.


 
Ученик ©   (2002-10-07 12:15) [1]

Hook устанавливается на все модули программы ?
(могут использоваться вызовы этих же функций, но в других модулях)


 
Ihor Osov'yak ©   (2002-10-07 12:18) [2]

2 Ученик © (07.10.02 12:15)
Не понял вопроса. Я использую технику внедрения своей длл в адрессное пространство чужого процесса, так как меня интересует получения текста с любого окна, в том числе и с окон чужих программ....


 
Ученик ©   (2002-10-07 12:22) [3]

>Ihor Osov"yak © (07.10.02 12:18)
Каким образом устанавливается hook, например, для DrawText ?


 
Игорь Шевченко ©   (2002-10-07 12:25) [4]

Hook не надо на GDI ставить. Hook надо на user ставить, бо весь вывод текста для окон идет через функции user.

Глупый вопрос, как всегда, нафига такое надо ?


 
Ihor Osov'yak ©   (2002-10-07 12:27) [5]

2 Ученик © Сделайте отдельную ветку, ибо Вы делаете выход за пределы сабж.

В общих чертах можно прочитать
http://www.internals.com/articles/apispy/apispy.htm
http://www.codeproject.com/system/hooksys.asp



 
Ученик ©   (2002-10-07 12:39) [6]

>Ihor Osov"yak © (07.10.02 12:27)
За пределы не выхожу, а пытаюсь ответить на вопрос,
DrawText - это DrawTextA, а также есть DrawTextW и так далее


 
Ihor Osov'yak ©   (2002-10-07 12:58) [7]

2 Игорь Шевченко ©

Ну cgi я не совсем корректно сформировал. Меня интересует какие апи функции еще могут использоватся для вывода, ибо хук ставится на контретную функцию, а не dll в целом.


> Глупый вопрос, как всегда, нафига такое надо ?



Ну имею "оригинального" заказчика с дебильным желанием.
Перегнать простенькую базу но очччееень большую методом чтения с экрана. Причем эта методика обсуждению не подлежит.

С первого взгляда показалось, что могу сделать все чтение с помощью wm_gettext ну и кликы по
по кнопочке next. Согласился, тем более оплата вроде бы нормальная была.
Но один контрол на WM_GETTEXT молчит, лоханулся я при анализе задачи...

Теперь дело не в деньгах, а как-бы в проф. гордости...

2 Ученик - это понятно, windows.pas читать умею ...
Но еще нужно (корень названия, а не вариации A и W)

ps.. Чувствую, придется долго и нудно делать анализ импорта приложения - жевтвы и mfc классов ...


 
Игорь Шевченко ©   (2002-10-07 13:26) [8]

Ihor Osov"yak © (07.10.02 12:58)

Может, OCR проще использовать ? Делать снимок экрана, распознавать текст, и вперед...

Но если есть импорт приложения, может, и данные можно оттуда как-то вытянуть ?

Впрочем, если платят неплохо, можно и самому постараться. Или делиться :-)


 
Ihor Osov'yak ©   (2002-10-07 13:38) [9]

Ocr я оставляю на запасной ваниант.

Платят 100 уе, что имхо для wm_gettext было не плохо (+ простенький интерфейс типа указать окно с которого грабать, кнопочку некст, простенький визард для базы - какой фрагмент текста в какое поле ложить). + я живу в очень малом городишке, где 100 уе за три-четыре дня работы очень неплохо.
Но вот для хука апишных вызовов или оср маловато. Но клиент переодически разную работенку подбрасывает, я его не хочу потерять из-за этого срыва.

Клиент капризный, я ему в самом начале предлагал, что вытяну данные напрямую с его базы, но он категорически - чтение с екрана. Подозреваю, что ему нужно пройтись еще по аналогичным базам

ЗЫ. С этой задачей я уже провел почти неделю ....


 
nikkie ©   (2002-10-07 18:37) [10]

попробуй PolyTextOut - в гриде вполне могли использовать. других функций, кроме тех, которые ты перечислил, вроде нет...


 
Ihor Osov'yak ©   (2002-10-07 19:07) [11]

nikkie:

Спасибо, уже пробывал. тот же результат.

По состоянию на сей момент времени блокирую
вывод

Drawtext DrawTextEx
TextOut ExtTextOut
GrayString PolyTextOut
TabbedTextOut DrawCaption

Десктоп выглядит касиво - никаково текста, кроме того ублюдочного контрола...

.... Справедливости нужно сказать, что также не блокируется вывод от IE (TWebBrowser), pdf-ридера и RichEdit виндового окна ...

Кто что по сему поводу думает?

Аа-уууууууууууууууу, гуру апишного текстового вывода ....


 
nikkie ©   (2002-10-07 20:50) [12]

есть гипотеза
1. ты работаешь на Win9x
2. ты не ловишь ExtTextOutW и TextOutW бо юникод, но они на этой платформе поддерживаются, как ни странно


 
Ihor Osov'yak ©   (2002-10-07 22:01) [13]

2 nikkie ©

Работаю под w2k, готовое изделие всегда проверяю под w9x, NT4 и XP - правда, сейчас к той стадиии не дошел :-(

Я делаю перехват и *W и *A. Кроме DrawCaption, ибо она "непарная .."

Но все-равно спасибо за желание помочь.


 
vidiv   (2002-10-08 09:38) [14]

А какое имя класса имеет тот контрол, для которого ты все это хочешь применить???


 
Игорь Шевченко ©   (2002-10-08 09:54) [15]

Ihor Osov"yak © (07.10.02 22:01)

Осталось только перечислить все, что импортирует перехватываемое приложение...


 
Ihor Osov'yak ©   (2002-10-08 10:20) [16]

2 vidiv - AfxWnd42. Как я понимаю, на этот оконный клас можно любую нахлобушку сделать, те имя класса ничего в даном случае не говорит. Хотя создатели контрола должны были бы использовать наследуемые примитивы рисования. Так что может я и не прав. Ввобще то в плане mfc опіт у меня нулевой....

2 Игорь Шевченко © (08.10.02 09:54)

Ой, подозреваю, что придется... Приложение большое - бинарников
мегабайт 5, есть наиболее подозрительная dll килобайт на 800, все это юзаент mfc dll.... Не хотелось бы за OCR браться ...



 
Игорь Шевченко ©   (2002-10-08 10:45) [17]

Ihor Osov"yak © (08.10.02 10:20)


> Ой, подозреваю, что придется... Приложение большое - бинарников
>
> мегабайт 5, есть наиболее подозрительная dll килобайт на
> 800, все это юзаент mfc dll....


На все воля Аллаха :-)


 
Ihor Osov'yak ©   (2002-10-16 16:50) [18]

Причину локализировал.

для mfc42.dll WriteProcessMemory не делает патча :-(....


ЗЫ- техника патча : внедрение своей длл в адресное постранство чужого процесса методом хука,
затем анализ таблиц импорта (динамически подгружаемые библиотеки меня пока не интересуют),
а далее патч через WriteProcessMemory, прямое присвоение не проходит, несмотря на то, что находимся в адресном пространстве чужого процесса, наверное нужны определенные права доступа к соотв. областям памяти процесса.





Зы2 , эту новую проблемс я взл на себя смелость разместить отдельной веткой




Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
3-92861
ligor
2002-11-08 17:12
2002.11.28
PReport


6-93168
Martin
2002-10-01 14:05
2002.11.28
TClientSocket в консольном приложение...


14-93248
Карлсон
2002-11-10 13:21
2002.11.28
хто цэ таке.


1-93002
kazulja
2002-11-18 05:42
2002.11.28
Speech 5.1


3-92888
Kaginava
2002-11-11 10:09
2002.11.28
Чтение blob