[Из песочницы] Mahou — волшебный переключатель раскладок

Как я создал первую функцию


Mahou.png Все началось с того что я захотел программировать на C#(до создания этой программы у меня было почти что никаких знаний о C#), и была одна программа которая не работала так как я хотел (Punto Switcher) долго-долго я искал к ней альтернативы и ненадолго остановился на dotSwitcher нравилась она мне… Но через некоторое время я решил что ей не хватает функционала и решил посмотреть исходный код, кое-где кое-как я разобрался как все работает, но больше всего не понимал одну вещь — WinAPI, и начал z искать информацию по функциям используемых в dotSwitcher и понемногу я начинал запоминать и понимать смысл всего этого волшебства (так мне тогда казалось).


Писать в уже созданный dotSwitcher мне не хотелось т.к. там совсем другой стиль кодинга, да и к тому же я не понимал бы зачем та или иная функция или переменная, так что я решил создать все с нуля! Для начала я разобрался с HOOK’ами, потом с функцией PostMessage с помощью которой я смог менять раскладку, благодаря чему уже у меня появились идеи по поводу того как можно будет конвертировать набранный текст. я создал список клавиш в который попадали все глобально нажатые клавиши (благодаря клавиатурному HOOK’у) приделал очистку списка клавиш по кликам мыши (благодаря мышиному HOOK’у) и создал горячую клавишу по которой менялась раскладка, но оставался вопрос «Как сделать чтобы программа вводила эти клавиши?», тогда то я и узнал о функциях SendInput и keybd_event которые делали именно это. После я переделал функцию горячей клавиши на:


  1. Сменить раскладку.
  2. Послать BackSpace [количество пойманных клавиш] раз.
  3. Ввести [пойманные клавиши].

И она работала!!! Так как я и хотел.


К каждой функции нужен свой способ осуществления, здесь я описал как я создал первую функцию смены раскладки последнего набранного текста.


Касательно названия я назвал программу (на японском, т.к. он мне очень нравится) — 魔法 (Mahou) что на Японском значит «Волшебство», «Магия» — C#, WinAPI и мой мозг (придумывающий способы осуществления функций) — это и есть та волшебство что сокрыто в названии.


Вот так выглядело первое окно Mahou:


xXhrJir.jpg

Вот так выглядит главное окно теперь:


YwHRTLC.png

Работает даже на Windows XP SP3!


dpNAdys.png

Описание


Программа написана на .Net 4.5, а для ее работы нужен .Net 4.0 и выше. Еще она использует WinAPI для работы всех HOOK’ов и других функций. Для сборки нужен всего лишь .Net, то есть Вы можете сами собрать сборку из исходников запустив buildMahou.cmd. Проект Open Source так что любой может изменять и создавать на его основе свои сборки согласно лицензии GPL v2. Подробное описание в репозиторие, описание функций на Wiki. Скачать можно здесь. Еще Mahou есть в Chocolatey, и для установки достаточно набрать команду cinst Mahou -y.


Возможности:


  • Переписать набранный вами текст на другой раскладке.
  • Переписать выделенный текст на другой раскладке.
  • Инвертирование раскладки выделенного текста.
  • Смена раскладки по Caps Lock, L/R Ctrl.
  • Возможность переключать текст по всем или только по выбранным раскладкам.
  • Подсказка текущей раскладки возле курсора мыши + настройки внешнего вида подсказки.
  • Подсказка текущей раскладки возле текстового курсора (каретки) + настройки внешнего вида подсказки для каждой раскладки.
  • Авто-обновление.
  • Двойные горячие клавиши (2xShift…)
  • Портативная, не требует установки.
  • Сниппеты, автозамена маленьких слов на предложения.

Помощь:


Если вам нравится программа, и/или Вы хотите меня поддержать (и если Вам не трудно):


  • Star on Github
  • Like on Alternative.to
  • Расскажите друзьям. :)

Ссылки:


→ Репозиторий на GitHub
→ Релизы на GitHub
→ Wiki на GitHub
→ Обсудить на GitHub
→ Скриншоты

Комментарии (1)

  • 9 февраля 2017 в 18:46

    0

    Пара советов, если позволите:

    1. На окне с настройками всё слиплось, а ссылка на Github занимает самое видное место. Попробуйте разнести их на несколько табов — должно стать гораздо приятнее на вид.

    2. Историю версий проще воспринимать, если они упорядочены по убыванию даты.

    3. Вместо этой наркомании наверняка помог бы десериализатор (XML или JSON).

    4. Очень странный способ локализации — советую почитать про ресурсы и сборки-сателлиты, будет удобнее.

    5. Логика в Code Behind — это моветон :)

    В общем, удачи в развитии проекта!

© Habrahabr.ru