Pull to refresh

Продолжая разговор об индикаторах раскладки

Reading time2 min
Views1.5K
Ну коли пошло такое дело ( Топик 1, Топик 2 )

В конце-концов IT-шный ресурс же, может напишем программу сами совместными усилиями?
Ибо ни AML, ни Punto многим не нравятся, а другие поделки не дотягивают даже до этих программ.


Далее буду говорить под win, ибо ее я апи я наиболее хорошо знаю. Если ктото может сделать тоже самое под MAC / *NIX — милости прошу сюда же в комменты.

Что получается по общему обсуждению:
  1. смена раскладки выделенного текста
  2. смена раскладки набираемого текста
  3. иконка текущей раскладки должна выводится в позиции курсора мыши
  4. иконка текущей раскладки должна выводится в позиции каретки
  5. иконка текущей раскладки должна выводится в плавающем окошке со стилем TOPMOST, чтобы можно было ее где-нибудь закрепить
  6. При смене раскладки можно зажигать определенные лампочки / кидать данные в порт / или чтото еще


Предлагаю сделать на чистом C / C++ и WinAPI — ибо шустро будет и просто — ну это на мой взгляд.

Варианты с реакцией на переключение предлагаю реализовать плагинами — бОльшая свобода для творчества и удобство для конечного пользователя. Под win в виде dll с оговоренными функциями.

Теперь размышления:
п1 как сделать — более-менее понятно. проблемы — скорее всего придется инжектироваться в процесс — хз как под 7 и вислой будет себя вести.

п2 плохо представляю алгоритм ибо как-то надо понимать начало набора конец + желательно автопереключение реализовать как в пунто => надо знать алгоритм автопереключения еще.

п3 вариант таков — попытаться получить данные текущего системного курсора мыши для текста, наложить на него значок и установить. Вроде должно прокатить.

п4 а вот с каретом — не знаю — мож у кого есть опыт? ибо изменить то его не сложно, но во первых это опять инъекция, во вторых оно там хитро както обрабатывается при WM_PAINT — надо успевать гасить каретку и показывать потом ее снова… Опять же мож был у кого опыт?
Есть еще вариант — не изменять карет в соответствии с языком, а определять его экранные координаты, и рисовать рядышком индикатор — мне кажется даже более удобно будет.

п5-п6 как сделать — вполне ясно. Как вариант еще одного плагина можно предложить OSD, как в телевизорах.

Т.е. в общем случае я так понимаю надо будет все равно решать все это через хуки. Непонятно только как быть с инъекциями — а без них по моему опять не обойтись.

Что думаете, господа IT-шики? Кто имел опыт общения на низком уровне с GUI под виндой и другими ос?

P.S. В комментариях подсказали:
  • часто используется автозамена — чем я тоже пользовался — забыл просто, так что тоже полезная функция
  • отключение в полноэкранных приложениях
  • для автопереключения сделать правила, в каких приложениях не срабатывать
Tags:
Hubs:
+1
Comments32

Articles

Change theme settings