Форум: "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.49 MB
Время: 0.009 c