Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение текста любого окна...


Iam ©   (2002-11-19 11:38:00) 

Как получить текст любого окна? Не его название, а текст Hint"а, например.
Ihor Osov"yak, я видел вы занимались этой проблемой...


Игорь Шевченко   (2002-11-19 14:32:00) [1]

Я помню возню, о которой идет речь.
Кстати, да, текст, который "относится" к окну и текст, который в окне отображается (даже в заголовке окна) это в общем случае, две большие разницы и, опять же, в общем случае, совершенно друг с другом не соотносятся. Но исключений из правила (Игорь Шевченко © (19.11.02 14:15)) не так уж и много встречается.
К счастью.

С уважением,


Ihor Osov'yak   (2002-11-19 14:22:00) [2]

"text that corresponds to a window" - как я понимаю, это далеко не то, что контрол, отображает на экране. А видимый текс как раз и имеют ввиду при разговоре на сабжевую тематику. ... И как потверждение вспоминаю свое двухнедельное занятие с каким-то навороченным mfc гридом, который представлял одно окошко и ничего не говорил на тему WM_GETTEXT. И на GetWindowText также. И думаю, в любой программе таких примеров куча. И как пример особого изврата (частного случая) - делфийская лейба, которая хендла не имеет, но текст с которой вышеописанным мною методом получить можно.


Игорь Шевченко   (2002-11-19 14:15:00) [3]

An application sends a WM_GETTEXT message to copy the text that corresponds to a windowinto a buffer provided by the caller.

Даже не знаю, что и сказать...


Ihor Osov'yak   (2002-11-19 14:12:00) [4]

> Задача-то, кстати, практического смысла не имеет, а мы тут пальцы гнем :-)))


Здесь согласен. Вообще-то было бы интересно услышать от
Iam (19.11.02 12:34), зачем ему хинты?
Или это он в опровержение на Reindeer Moss Eater (19.11.02 12:32), скажем так, частный пример и не очень удачный.

То что Reindeer Moss Eater (19.11.02 12:32) не прав, утверждая
"любого" - это я таки так. В смысле неправ. :-)


Игорь Шевченко   (2002-11-19 14:05:00) [5]

Ihor Osov"yak © (19.11.02 13:36)

Это один из вариантов. Никто не мешает сделеать такие Hint"ы.

> Даже если это так, то в MemoryDC теми же апишными функциями
> текст выводтся. А мы их ловим.

А как мы узнаем, что нам надо ловить их при выводе в MemoryDC ?
Мало ли что приложение в какие DC выводит...Если при этом еще заниматься анализом, что впоследствии с этими DC происходит, то задача сильно выходит за рамки "Получение текста из Hint"a".

Задача-то, кстати, практического смысла не имеет, а мы тут пальцы гнем :-)))


Ihor Osov'yak   (2002-11-19 13:36:00) [6]

2 Игорь Шевченко © (19.11.02 13:16/

По поводу MemoryDC установленный факт или это просто рабочая гипотеза (мой експириенс не позволяет мне с ходу ответить на этот вопрос)?

Даже если это так, то в MemoryDC теми же апишными функциями текст выводтся. А мы их ловим. Конечно, тут есть трудность, что простым форсажем перерисовки не заставишь сработать эти вызовы тогда, когда нам это удобно (ибо MemoryDC уже и готов, и он вероятнее всего по новому не будет формироватся). Но можно пытатся ловить апи, которые создают этот dc, потом ловить вывод в dc, а потом уже на основании того с какого MemoryDC идет перенос картинки в целевое окно выуживать с логов искомый текст. Занятие конечно муторное, но вполне решаемое.




Игорь Шевченко   (2002-11-19 13:16:00) [7]

Ihor Osov"yak © (19.11.02 13:06)

Потому, что если текст в hint"е появляется копированием в его DC содержимого MemoryDC с заранее подготовленным текстом, то как снять ? :-)

С уважением,


Ihor Osov'yak   (2002-11-19 13:06:00) [8]

2 Игорь Шевченко © (19.11.02 12:54) - ну почему, же,

см Ihor Osov"yak © (19.11.02 12:34)

повторюсь - тестовым приложение идет блокировка вывода в хинтах также. А нем где блокировка - там можно сделать и сьем.

Зы. Только пари я заключать с Вами не стану, уже есть текущее - про хендлы файлов. Ну разьве что кто-то разработку "перехватчика хинтов в общем случае" профинансирует :-)


Игорь Шевченко   (2002-11-19 12:54:00) [9]

У Hint"a в общем случае - никак.


Iam   (2002-11-19 12:41:00) [10]

2Ihor Osov"yak.
Спасибо :)


Ihor Osov'yak   (2002-11-19 12:38:00) [11]

2 Iam (19.11.02 12:37)
Без проблем, я понял


Iam   (2002-11-19 12:37:00) [12]

2Ihor Osov"yak: Простите, это я для Игоря Шевченко пояснял. Не корректно как то получилось.


Iam   (2002-11-19 12:34:00) [13]

Поясняю. У Hinta как текст взять?


Ihor Osov'yak   (2002-11-19 12:34:00) [14]

Да, получилось. Методом перехвата соотв. апишных функций.

Но: не работает для IE, Acrobat Reader.. Для IE - юзаем соотв. интерфейсы, проблем нет. Для Acrobat Reader - не анализировал. Возможно они делают динамическую загрузку адресов соотв. апишных функций, я делал перехват статически подгружаемых. Также возможно будут проблемы с разного рода издательскими пакетамы, делающими ну очень уж хитрую отрисовку (к ним с некоторой натяжкой можно отнести и вышеупомянутого ридера).

Зы, меня не интересовало решение в общем случае, мне нужно было для конкретной программы, этим и обьясняется и мой останов на пол-пути (верне подготовку специализироаного решения для одного приложения)

Хинты счас проверю ( у меня есть тестовое приложение, просто блокирующе вывод) - да, вывод текста хинтов блокируется также.


Примерный метод решения:

- Ставим общесистемнвй хук на очередь сообщения ( с целью внедрить свою длл)
- в своей длл смотрим куда внедрились - если это не целевое приложение, ничего не делаем, если целевое - делаем подмену соотв. апишных вызовов (тут была трабла для dll от mfc - нужно было назначить соотв. права на соотв. участки образов длл - я с этим несколько дней воевал, спасибо, на этом форуме просветили)
- со своих обработчиков конешно зовем настоящие апи, чтобы картинку не споганить, но попутно своему шпиону шлем инфу какой текст выводится и по каким координатам
- в шпионе делаем на основании координат синтез того, что видит юзер. Очень муторное занятие :-).

Зы. шлем инфо не про весь вывод, в этом потоке инфо можно захлебнутся, а только тогда, когда шпион попросит, указав соотв. окно, с которого нужно делать сьем. Крнечно после этого шпион заставляет соотв. окно перерисовыватся.

Зы2. Алгоритм может и не универсальный, но для меня подошел. Немного еще поизращавшись наверно можно подготовить и универсальное решение.









Reindeer Moss Eater   (2002-11-19 12:32:00) [15]

Текст любого окна получается с помощью WM_GETTEXT.
Для некоторых классов окон это будет заголовок окна.


Игорь Шевченко   (2002-11-19 12:31:00) [16]

Iam (19.11.02 12:30)

Тогда поясни, плз, что ты имеешь в виду.
WindowText для Edit"а, к примеру, это его содержимое.


Iam   (2002-11-19 12:30:00) [17]

Дык не его название....


Игорь Шевченко   (2002-11-19 12:22:00) [18]

Либо WM_GETTEXT, либо GetWindowText вроде, больше никак...


Наверх

Титульная страница Поиск, карта сайта Написать письмо