Возникла следующая проблема:
Необходимо получить текст под курсором мышки, но методы Active Accessibility и обычный SendMessage(...GET_TEXT...) не подходят. Например, есть программа Skype и в самом первом окне ввода логина и пароля есть надпись "Добро пожаловать в Skype". Каким образом можно получить эту надпись в своей программе? Выше сказанными методами её получить не удается, но есть переводчик ABBYY Lingvo 12, который этот текст получает и переводит. Может кто знает как он берет текст под курсором?
24.10.08 17:44: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, sonick, Вы писали:
S>Необходимо получить текст под курсором мышки, но методы Active Accessibility и обычный SendMessage(...GET_TEXT...) не подходят. Например, есть программа Skype и в самом первом окне ввода логина и пароля есть надпись "Добро пожаловать в Skype". Каким образом можно получить эту надпись в своей программе? Выше сказанными методами её получить не удается, но есть переводчик ABBYY Lingvo 12, который этот текст получает и переводит. Может кто знает как он берет текст под курсором?
я то же думал, как это Лингво работаетю. но кроме перехвата вывода текста ничего не придумал.
"sonick" <78097@users.rsdn.ru> wrote in message news:3150909@news.rsdn.ru... > Возникла следующая проблема: > Необходимо получить текст под курсором мышки, но методы Active Accessibility и обычный SendMessage(...GET_TEXT...) не подходят. Например, есть программа Skype и в самом первом окне ввода логина и пароля есть надпись "Добро пожаловать в Skype". Каким образом можно получить эту надпись в своей программе? Выше сказанными методами её получить не удается, но есть переводчик ABBYY Lingvo 12, который этот текст получает и переводит. Может кто знает как он берет текст под курсором?
Когда-то мне попадалось на глаза описание библиотеки (не бесплатной), которая получала текст, читая экранный битмэп и потом его распознавая.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>Когда-то мне попадалось на глаза описание библиотеки (не бесплатной), которая получала текст, читая экранный битмэп и потом его распознавая.
это на порядок сложней, чем перхватывать DrawText или чем там рисуют текст обычно
" Сергей Мухин " <23380@users.rsdn.ru> wrote in message news:3150930@news.rsdn.ru... > Здравствуйте, Sergey, Вы писали: > > S>Когда-то мне попадалось на глаза описание библиотеки (не бесплатной), которая получала текст, читая экранный битмэп и потом его распознавая. > > это на порядок сложней, чем перхватывать DrawText или чем там рисуют текст обычно
Ну во-первых, если бюджет позволяет, можно купить готовую библиотеку, и это будет проще.
Во-вторых, ваш перехват может перестать работать в следующей версии ОС — по соображениям безопасности, например.
В третьих, текст могут рисовать с помощью средств, о которых вы на момент разработки программы ничего не знаете. Например, вместо DrawText там вполне может оказаться libagg или скажем просто OpenGL какой.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
S>" Сергей Мухин " <23380@users.rsdn.ru> wrote in message news:3150930@news.rsdn.ru... >> Здравствуйте, Sergey, Вы писали: >> >> S>Когда-то мне попадалось на глаза описание библиотеки (не бесплатной), которая получала текст, читая экранный битмэп и потом его распознавая. >> >> это на порядок сложней, чем перхватывать DrawText или чем там рисуют текст обычно
S>Ну во-первых, если бюджет позволяет, можно купить готовую библиотеку, и это будет проще.
это конечно!
S>Во-вторых, ваш перехват может перестать работать в следующей версии ОС — по соображениям безопасности, например.
ну тогда и экранный битмап вам не дадут, по тем же соображениям.
S>В третьих, текст могут рисовать с помощью средств, о которых вы на момент разработки программы ничего не знаете. Например, вместо DrawText там вполне может оказаться libagg или скажем просто OpenGL какой.
дык перехватывай все что пишет текст, в чем проблема? Его могут и по пиксельно рисовать, тогда ах!
Но надо же перехватывать у приличных программ, они то от этого обычно не защищаются.
" Сергей Мухин " <23380@users.rsdn.ru> wrote in message news:3150997@news.rsdn.ru...
> S>Во-вторых, ваш перехват может перестать работать в следующей версии ОС — по соображениям безопасности, например. > > ну тогда и экранный битмап вам не дадут, по тем же соображениям.
Не факт. Одно дело в чужое адресное пространство лезть, другое — экран грабить. Малвари, грабящей экран, я что-то не припомню.
> S>В третьих, текст могут рисовать с помощью средств, о которых вы на момент разработки программы ничего не знаете. Например, вместо DrawText там вполне может оказаться libagg или скажем просто OpenGL какой. > > дык перехватывай все что пишет текст, в чем проблема? Его могут и по пиксельно рисовать, тогда ах!
Средствами OpenGL или libagg — это конечно не попиксельно, а битмэпом, но сути проблемы не меняет.
> Но надо же перехватывать у приличных программ, они то от этого обычно не защищаются.
Угу, они не защищаются, они свои задачи решают — 3D там выводят или там алиасинг забарывают. Тока перехватывать опять непонятно что.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>это на порядок сложней, чем перхватывать DrawText или чем там рисуют текст обычно
А не могли бы вы сказать как можно перехватить DrawText (допустим я поставил Hook в длл). Какое сообщение перехватывать? Сообщение WM_PAINT? Даже если я его перехватываю, где я в нем найду текст?
"sonick" <78097@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3150909@news.rsdn.ru... > Возникла следующая проблема: > Необходимо получить текст под курсором мышки, но методы Active Accessibility и обычный SendMessage(...GET_TEXT...) не подходят. Например, есть программа Skype и в самом первом окне ввода логина и пароля есть надпись "Добро пожаловать в Skype". Каким образом можно получить эту надпись в своей программе? Выше сказанными методами её получить не удается, но есть переводчик ABBYY Lingvo 12, который этот текст получает и переводит. Может кто знает как он берет текст под курсором? > >
Как то пару тройку месяцев назад вопрос уже поднимался. Тогда написал пару тестов да прогнал их под Лингвой. Получилось следующее: для Edit приходит сообщение WM_GETTEXT, для RichEdit также приходит EM_EXGETSEL — которое специфично исключительно для RichEdit. Для IE волшебным образом выделенный текст вообще уходил в буфер обмена.
Такое ощущение, что Лингва для разных окон используют совершенно разные методы, что в принципе изначально и предполагалось. Хотя безусловно любопытно что они используют последним способом, когда тяжелая артиллерия не работает?
PS: в самописных тестах блокировал обработку WM_GETTEXT, WM_COPY и иже с ними, инициированных не моим, а чужим кодом. В этом случае Лингво грустно обламывалась и текст вынуть не могла. Тоже наводит на мысли....