Текущий архив: 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