Люди, подскажите пожалуйста как Лингво находит слова под указателем мыши и переводит их? Как работать и находить оконные объекты понятно вполне. Но вот что делать например с иконками рабочего стола или меню ворда? Всем заранее большое спасибо!
"Conr" <8859@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:3012304@news.rsdn.ru...
> Здравствуйте, Dwyane, Вы писали:
>
> D>Люди, подскажите пожалуйста как Лингво находит слова под указателем мыши и переводит их? Как работать и находить оконные объекты понятно вполне. Но вот что делать например с иконками рабочего стола или меню ворда? Всем заранее большое спасибо!
> Возможно через IAccessible и K. Хотя там тоже свои сложности, насколько я помню так можно получить предложение, а не конкретное слово.
Не используют они IAccessible, а внедряют хук и дергают слово из каждого окна по своему. Проверено., Для тех же RichEdit шлют EM_STREAMOUT; для Edit`а WM_GETTEXT, а потом вынимают нужно слово из всего текста. Надо полагать код для других типов окон тоже специфичен.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, Carc, Вы писали:
C>"Conr" <8859@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:3012304@news.rsdn.ru...
>> Здравствуйте, Dwyane, Вы писали:
>>
>> D>Люди, подскажите пожалуйста как Лингво находит слова под указателем мыши и переводит их? Как работать и находить оконные объекты понятно вполне. Но вот что делать например с иконками рабочего стола или меню ворда? Всем заранее большое спасибо!
>> Возможно через IAccessible и K. Хотя там тоже свои сложности, насколько я помню так можно получить предложение, а не конкретное слово.
C>Не используют они IAccessible, а внедряют хук и дергают слово из каждого окна по своему. Проверено., Для тех же RichEdit шлют EM_STREAMOUT; для Edit`а WM_GETTEXT, а потом вынимают нужно слово из всего текста. Надо полагать код для других типов окон тоже специфичен.
Так а как они будут узнавать что за елемент лежит на форме?
Про браузеры ( да и вообще COM объекты ) тогда вообще можно забыть. Насколько я понимаю клик шлеться некону оконному елементу, а потом некий метод по ДОМ модели определяет на чем реально был клик. А ведь с браузерами Лингво работает отлично.
> C>Не используют они IAccessible, а внедряют хук и дергают слово из каждого окна по своему. Проверено., Для тех же RichEdit шлют EM_STREAMOUT; для Edit`а WM_GETTEXT, а потом вынимают нужно слово из всего текста. Надо полагать код для других типов окон тоже специфичен.
>
> Так а как они будут узнавать что за елемент лежит на форме?
Если формы соответствующие, то лежащий элемент наш человек и правильно на них лег. А если формы так себе, то на них лежит элемент несознательный, лег он туда явно в силу стечения обстоятельств и скорее всего он просто спит
Что за элементы? Что за формы? К вопросу о терминологии (сори, за занудство

Выяснить какое окно имеет фокус ввода не проблема, для этого есть тысяча и один способ.
> Про браузеры ( да и вообще COM объекты ) тогда вообще можно забыть. Насколько я понимаю клик шлеться некону оконному елементу, а потом некий метод по ДОМ модели определяет на чем реально был клик. А ведь с браузерами Лингво работает отлично.
Почему можно забыть про браузеры и COM-объекты? Зачем же так печально — вполне в том же IE получить текст из элемента (вот тут соглашусь, наречем его элементом), который имеет фокус ввода не такая уж и проблема. Куда гиморнее с "соседними элементами" или вообще с текстом из BODY ковыряться. Но опять же возможно же и это.
Как они вытворяют сие с Оперой или Firefox`ом — понятия не имею, это уже вопрос к эббитам. C Firefox возможности есть, это понятно. Как бы некий опыт был (правда из другой песни уже совсем, и до ума не доводил — но кое что Firefox все же предоставляет). C Оперой не в курсе. Но в процессе гоняния Лингвы под SPy++ выяснилось что нативным окнам (RichEdit, Edit) в конце концов приходит какое-либо явное сообщение на вывод (EM_STREAMOUT, WM_GETTEXT), а к примеру для того же IE6 все вообще проще оказалось — нажали что там положено Ctrl+C+C и упс, а выделенный то текст уже в буфере обмена. И кстати плевали они на то что предыдущий буфер будет затерт

Тесты с нативными окнами я проверял на своем коде, и там уж точно все было через сообщения (более того если не давать обрабатывать эти сообщения, когда отослал их не сам же — то Лингва мрачно обламывалась).
Я, в общем, к тому, что судя по всему используются разные имплементации для разных типов окон, где-то через буфер обмена, где сообщение, где что. Кстати при этом никто не запрещает использовать незабвенный интерфейс IAccessible чтобы быть в курсе, где именно фокус ввода. А вынимать уже можно по разному. В том числе и через DOM. Полагаю, что они используют разные способы.
Posted via RSDN NNTP Server 2.1 beta
> С браузерами и прочими вордами, думаю, легче всего — там есть дом, по HWND достаточно легко к нему подключиться и пользоваться им.
Ну и например как подключиться к DOM той же Оперы по ее HWND?
Версия 9.50 не в счет, это специальный неспортивный релиз, который как раз и ввел поддержку IAccessible — там получать текст — делать нечего. А вот как сие творить в той же 9.25? Уже не так то просто...
Имхо, как раз проще с HWND — окно оно и в Африке окно — не мытьем, так катаньем "уломать" его можно.
Posted via RSDN NNTP Server 2.1 beta