Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Вниз

Получение текста любого окна...   Найти похожие ветки 

 
Iam   (2002-11-19 11:38) [0]

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


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

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


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

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


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

Iam (19.11.02 12:30)

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


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

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


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

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

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

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

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


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

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

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

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










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

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


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

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


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

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


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

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


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

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


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

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

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

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

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


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

Ihor Osov"yak © (19.11.02 13:06)

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

С уважением,


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

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

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

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





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

Ihor Osov"yak © (19.11.02 13:36)

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

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

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

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


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

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


Здесь согласен. Вообще-то было бы интересно услышать от
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:15) [16]

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

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


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

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


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

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

С уважением,



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

Форум: "WinAPI";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.049 c
14-15220
Calm
2002-12-15 16:27
2003.01.06
Трассировка. Как выполнить прогу до конца метода?


1-15010
viper
2002-12-24 12:39
2003.01.06
dbgrid


7-15330
Олег_В
2002-07-11 00:57
2003.01.06
Как удалить EXEшник и на его место записать другой?


4-15361
maxim2
2002-11-19 11:56
2003.01.06
У кого стоит WinNT, Win2000, WinXP подскажите


1-15094
Beginner
2002-12-22 18:53
2003.01.06
Как в RichEdit вставить текст в текущую позицию курсора?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский