Page 1 of 1

Взаимодействие с другими программами под Windows

PostPosted: Sat Jun 04, 2011 1:29 pm
by Abs62
Учитывая, что нынешний алгоритм получения слова под курсором работает далеко не со всеми программами, есть предложение дать таким программам возможность самостоятельно определить искомое слово и сообщить его GD.
Идея такая: когда ищем слово, первым делом посылаем окну под курсором сообщение с запросом слова и искомыми координатами. Если оно отвечает, отдаём полученное слово GD и больше не рыпаемся. А если не отвечает - работаем прежним методом.

В приложении - экспериментальный вариант библиотек сканирования с исходниками и заголовочный файл для сторонних программ GDDataTranfer.h. Подробности предлагаемой реализации в нём. Кто хочет опробовать на своих программах, как это работает, пробуйте.

Кто что думает на этот счёт?

Re: Взаимодействие с другими программами под Windows

PostPosted: Sat Jun 04, 2011 9:42 pm
by ikm
Идея предоставления интерфейса другим программам хорошая, но есть одна проблема - таких программ даже через год-два окажется единицы. Пока что был только один pdf-просмотрщик, пользователи которого проявили интерес к подобному интерфейсу. То есть, конечную проблему того, что слова читаются из малого числа приложений, он все-таки не решит...

Однако с текущим алгоритмом надо что-то делать.

У меня была такая мысль: для извлечения слова из приложения пользователю следует выделить его в самом приложении средствами приложения (обычно достаточно двойного щелчка, чтобы выделить текущее слово) - затем, чтобы получить это слово, мы перехватываем у этой программы функции работы с Clipboard и посылаем ей виртуальное нажатие Ctrl-C. Если программа в ответ на это пытается записать что-то в Clipboard - значит, в ней есть выделенное слово, которое мы и переводим. Плюс такого подхода в том, что он позволяет выделять не только слова, но и произвольные словосочетания, а также в том, что это, в теории, будет работать практически везде.

Я не настолько хорошо дружу с WinApi, чтобы пробовать это реализовать - но, может, вы попробуете? :)

Re: Взаимодействие с другими программами под Windows

PostPosted: Sun Jun 05, 2011 8:21 am
by Abs62
Насчёт работы через выделение я тоже думал. Но тут у меня пока что больше вопросов, чем ответов. Во-первых, мне пока непонятно, как отслеживать сам момент выделения в приложениях. Во-вторых - как это выделение оттуда вытащить, не портя содержимое буфера обмена. А портить его очень не хочется. В конце концов с его порчей и сейчас работать можно, через Ctrl+C+C, это не сильно геморнее, чем с выделением и зажатием модификаторов. Особенно если учесть, что на модификаторы по сути остаётся только Alt, потому как и Ctrl, и Shift влияют на режим выделения.

А интерфейс для других программ радикально проблему, конечно же, не решит. Но если он будет, у пользователей этих других программ хоты бы появится возможность дёргать разработчиков за хлястик и просить, чтобы они реализовали взаимодействие. Не будет интерфейса - и просить не о чем.
К тому же, реализовать его можно прямо сейчас, а работа по выделению - это перспектива. Не скажу даже какой отдалённости. ;)

Да и пользоваться наведением курсора на мой взгляд удобнее, чем выделением. Если можно обеспечить возможность работы по наведению, думаю, это стоит делать.

Re: Взаимодействие с другими программами под Windows

PostPosted: Sun Jun 05, 2011 8:52 am
by ikm
Abs62 wrote:Во-первых, мне пока непонятно, как отслеживать сам момент выделения в приложениях.

Да, это сложный вопрос. Мне мыслится пока что-то типа того, что если в течение нескольких секунд после последнего клика мышью нажимается настроенная комбинация модификаторов, то можно пытаться извлекать перевод. В линуксе такой режим довольно удобен - правда, под линуксом момент изменения выделения известен.

Abs62 wrote: Во-вторых - как это выделение оттуда вытащить, не портя содержимое буфера обмена.

Так же, как сейчас сделан перехват слова под курсором - перехватываются всякие OpenClipboard, в приложение посылается запрос на запись в клипборд, оно пытается туда записать и вместо этого дергает перехваченные функции.

Abs62 wrote:А интерфейс для других программ радикально проблему, конечно же, не решит. Но если он будет, у пользователей этих других программ хоты бы появится возможность дёргать разработчиков за хлястик и просить, чтобы они реализовали взаимодействие. Не будет интерфейса - и просить не о чем.

Согласен. Пускай будет.

Re: Взаимодействие с другими программами под Windows

PostPosted: Sun Jun 05, 2011 9:17 am
by Abs62
ikm wrote:Так же, как сейчас сделан перехват слова под курсором - перехватываются всякие OpenClipboard, в приложение посылается запрос на запись в клипборд, оно пытается туда записать и вместо этого дергает перехваченные функции.

Сейчас в некоторых программах функции вывода не перехватываются. Например, в OpenOffice. Смотрел через SpyStudio - вывод дёргается, а в хуки управление не передаётся. Возможно, там используется позднее связывание с запросом адресов через GetProcAdress.
Если встретится такая же бяка с функциями работы с буфером обмена - будет засада. С выводом-то ладно, оттого, что строчка лишний раз отрисуется, никто не пострадает. А вот если буфер несанкционированно меняться будет, это гораздо хуже.
Ладно, будем думать дальше. Может, чего и придумается. ;)

Re: Взаимодействие с другими программами под Windows

PostPosted: Sun Jun 05, 2011 2:06 pm
by Tvangeste
Abs62 wrote:Ладно, будем думать дальше. Может, чего и придумается. ;)

В свежевышедшем Lingvo x5 заявлено, что он, дескать, научился обращаться со свежими браузерами и всплывающий перевод в них работает. Интересно бы узнать - как они этого добились.

Где-то читал, там утверждалось, что пацаны чуть ли не распознавание образов на лету делают и на лету из картинки текст вынимают. Даже и не знаю, верить ли.

Re: Взаимодействие с другими программами под Windows

PostPosted: Mon Jun 06, 2011 6:57 am
by ikm
Только что поиграл с Lingoes - из firefox 4 по клику оно перевод не осуществляет, зато вот перевод выбранного работает. Попробовал и в OpenOffice - тоже работает. Интересно, как это реализовал автор программы?

Re: Взаимодействие с другими программами под Windows

PostPosted: Tue Jun 07, 2011 4:59 am
by rbak
Tvangeste wrote:В свежевышедшем Lingvo x5 заявлено, что он, дескать, научился обращаться со свежими браузерами и всплывающий перевод в них работает. Интересно бы узнать - как они этого добились.

Где-то читал, там утверждалось, что пацаны чуть ли не распознавание образов на лету делают и на лету из картинки текст вынимают. Даже и не знаю, верить ли.


Все верно вот обсуждали viewtopic.php?f=8&t=1141