· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как получить рисованный в окне текст

Посл.отвђт Сообщенiе


Дата: Апр 6, 2004 12:24:38

С помощью посылки чужому окну (находящемся под курсором) сообщения WM_GETTEXT я получаю его текст .

А как можна получить текст который "нарисован" (TextOut,ExtTextOut,DrawText) ?


Дата: Апр 6, 2004 14:11:35

Считать прямоуголькник с текстом как картинку и распознать файнридером :)


Дата: Апр 6, 2004 16:45:32 · Поправил: prog

наверное можно получить координаты объекта,(которому посылается WM_GETTEXT)и сграбастать эту область экрана (это уже было), и потом ... не знаю..
наверное перебрать прямоугольник по точкам и сгенерить строку блин... круто.


Дата: Апр 6, 2004 16:57:35

А если подойти к проблеме по-другому..
Например, перехватывать TextOut,ExtTextOut,DrawText?


Дата: Апр 6, 2004 17:01:42

наверняка они уже нарисовались раньше чем...


Дата: Апр 6, 2004 17:24:42

Да я делал прогу http://wasm.ru/forum/files/_1448566602__gettext.zip , которая грабит текст из MessageBox .

Но , на месаджбоксах дельфийских прог не срабатывает !
Я так понял , что дельфи РИСУЕТ текст в TMessageForm .

Думал может в свойствах (GetProp) окна (TMessageForm) храняться указатели на что-то , что поможет найти текст (если он не разрушаеться после рисования) .

А там точно указатели есть , примерно такие :
0014DF28 CC32SubclassInfo
00E6CDA4 Delphi00000268
00E6CDA4 ControlOfs0040000000000230


Дата: Апр 6, 2004 18:13:32

[ bogrus - Я так понял , что дельфи РИСУЕТ текст в TMessageForm ]

Как рисует? По пикселям, без WinAPI что-ли - так только в игрушках будут делать, да и то далеко не всегда IMHO.
Однозначно вызываются API.. И тогда в стеке лежат нужные адреса строчек текста - остается только их взять.


Дата: Апр 6, 2004 18:45:04

Однозначно вызываются API..
Дак я ж говорил , что-то из этих (TextOut,ExtTextOut,DrawText)

И тогда в стеке лежат нужные адреса строчек текста
Об этом я подозревал , и в принципе они ведь должны там ещё быть пока окно на экране (чтобы перерисовывать окно) ?

остается только их взять
Самое кульное , как определить откуда брать ?
Ведь не понятно в чей стек смотреть и по какому смещению :)
Может рисует не приложение а .vcl всякие ?
И доберусь ли я от hDc под курсором к смещению в стеке его потока ?


Дата: Апр 6, 2004 18:59:35

в принципе они ведь должны там ещё быть пока окно на экране (чтобы перерисовывать окно)
Ага, все все рисуют как раз по приходу WM_PAINT :)

Ведь не понятно в чей стек смотреть и по какому смещению :)
Ну не в свой же стек смотреть :)

Может рисует не приложение а .vcl всякие?
Предположу, что даже vcl без апи не обходится.

И доберусь ли я от hDc под курсором к смещению в стеке его потока?
Вот это навряд ли :)))

Можешь попробовать клептоманию посмотреть - как у них все устроено, может на мысли натолкнет...


Дата: Апр 6, 2004 19:31:20

prog
наверняка они уже нарисовались раньше чем...
InvalidateRect и перехватить TextOut.


Дата: Апр 6, 2004 19:45:24

InvalidateRect и перехватить TextOut
Ну-ну... Я вот, например, TextOut вызываю один раз на этапе инициализации окна(диалога), создаю offline DC и при перерисовке только копирую из offline в online :) Как в этом случае?


Дата: Апр 6, 2004 19:48:00

masquer
Можешь попробовать клептоманию посмотреть - как у них все устроено,

Посмотрел . Они решили свой файнридер написать
Dr.Golova был прав :)

S_T_A_S_
Например, перехватывать TextOut,ExtTextOut,DrawText?

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

masquer
может на мысли натолкнет...

Ага , закрыть тему ...


Дата: Апр 6, 2004 20:03:00

masquer
Некоторые криво написанные программы (splash-screen'ы) вообще рисуют только один раз и после наложения других окон оставляют белые пятна :-)

Писать распознаватель текста - затея, мягко говоря, не дзенная.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.107