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


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


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


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

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


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


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


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



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



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



Описание


Программа написана на .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...)
  • Портативная, не требует установки.
  • Сниппеты, автозамена маленьких слов на предложения.
  • Отображения флагов стран в трее.

Помощь:


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



Ссылки:


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

Поделиться с друзьями
-->

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


  1. impwx
    09.02.2017 18:46
    +1

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

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

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

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

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

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

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


    1. Thecentury
      09.02.2017 21:50

      И ещё велосипедиум в логировании вместо NLog или log4net :)


      1. BladeMight
        10.02.2017 00:55

        Мне предлагали, но Я решил сам попробовать реализовать.


    1. BladeMight
      10.02.2017 00:53

      1. Я уже подумывал над созданием новыго интерфейса.

      2. Думаю будет удобнее.

      3. Раньше был XML, но у он не у всех работал, поэтому Я придумал новый способ сохранения/загрузки конфигурации с использованием WinAPI.

      4. Полезно будет узнать новое.

      5. :)

      Спасибо.


      1. Deosis
        10.02.2017 07:30

        3. Можно попробовать добавить словари со значениями по умолчанию, разделить по секциям или по способу валидации. Вся портянка свернется в код инициализации и несколько циклов.


      1. impwx
        10.02.2017 13:11

        По поводу пункта 3 — если бы такой баг действительно был во встроенном XML-сериализаторе, его бы давно заметили и исправили. Нужно посмотреть на то, как вы им пользовались — могло побиться при рефакторинге файла настроек между версиями.

        В качестве альтернативы попробуйте хотя бы Newtonsoft JSON.


  1. trapwalker
    09.02.2017 19:10
    +37

    и начал z искать информацию

    Забавно. О многом говорит=)


  1. Shifty_Fox
    09.02.2017 19:28
    +1

    Я давно использую вашу программу, все почти идеально. Не ожидал внезапно встретить авторскую статью на Хабре, вот вам просьба из аудитории:
    Флаги стран в трее. Я бы использовал стандартный RU\EN индикатор, но он меняется с задержкой в несколько секунд, неудобно.


    1. BladeMight
      10.02.2017 01:50

      Флаги стран в трее

      Думаю было бы неплохо, добавлю в будущем.


  1. trapwalker
    09.02.2017 19:35

    А по существу. Какие основные отличия от Punto Switcher'а?
    Из вашего описания я делаю вывод, что часть его фич вы не реализовали.
    Черный список, отключающий автопереключение для специфических слов есть?
    Не столько претензия, сколько простой вопрос: Почему такая жесткая экономия места в интерфейсе? Местами вам приходится применять сокращения, когда можно написать полностью просто скомпоновав все попросторнее.
    Если разнести настройки по вкладочкам, то к каждой галочке можно будет внятно и лаконично написать что она означает и при этом интерфейс не станет перегруженным. Там-то интерфейса того раз два и обчелся.
    Не знаю, может у вас там развесистые и удобные хинты, но делать отдельную справку и сопоставлять эти два контекста для настройки приложения это как-то… кустарно. Я понимаю, что взгляд у вас замылен, вы знаете все нюансы этой переключалки и для вас все очевидно, но пользователям милее простая лаконичная прозрачность в программе, которой хотелось бы в идеале не замечать. Идеальный вариант — просто забыть о том, что она есть и пользоваться на автомате. В вашем случае придется вспоминать каждый раз. когда что-то идет не так.
    При беглом осмотре вики и скриншотов я не нашел (или не заметил) настроек черного списка приложений, где нужно отключить автопереключение или ввести специфические правила.
    У вас есть такая функция? Планируется, если нет?


    1. lam0x86
      09.02.2017 19:42
      +3

      Мой внутренний параноик полагает, что Punto Switcher — это не просто переключатель клавиатуры. С чего бы Яндексу нужен был этот совершенно неприбыльный продукт? Зато кей-логгер из пунты получается отличный.


      1. trapwalker
        09.02.2017 19:57
        +1

        Ваш внутренний параноик молодец. Наверно он вам примерно в том же духе бухтит про яндекс-браузер, про гугл-хром, про андроид, про… Однако люди этим пользуются и не парятся. Может быть кто-то и не осознает до конца, но по-большому счету… почему нет? Ну будет яндекс более качественно подбирать для вас контекстную рекламу, ну получит какие-то данные для улучшения своего поиска… Я бы больше опасался за сторонний мелкий продукт, пусть даже опенсорсный, у которого слишком мелкое коммьюнити, чтобы вычесать оттуда большинство уязвимостей и делать это достаточно оперативно. Какая-нибудь лазеечка с не очень аккуратной работой с DNS или https в автообновлении, и этот продукт в умелых руках становится реально опасным шпионом. Я не хочу сказать, что с Punto такого случиться не может, но ресурсов у них, мне кажется, больше.
        Очевидно, что это не единственный вектор атаки. Поломать могут цепочку на любом этапе, а в случае одного-двух мантейнеров получается бутылочное горлышко, в котором очень удобно вставить закладку. Большинство-то пользователей качает бинари и ставят то, что пришло с автообновлением.
        Я не хочу ничего сказать в пользу того или иного продукта, но хочу обратить внимание параноиков, что не всё так однозначно. Если вы настолько параноик, что обходитесь собственными сборками хромиума после личного ревью каждого апдейта, то вы скорее всего и без переключателя раскладок себя чувствовать нормально будете. По крайней мере приучить себя к переключению сравнительно нетрудно.


        1. redmanmale
          09.02.2017 22:47

          Намного проще доверять небольшому опенсорсному продукту, который я могу собрать сам, отключив все «обновлялки» или шпионские функции.
          И да, очевидно, что и я.браузер, и гугл-хром и иже с ними шлют туеву хучу статистики на свои сервера.
          И как раз простые приложения от таких гигантов вызвают много вопросов и оправданных опасений.


          1. trapwalker
            09.02.2017 23:42
            +2

            Вот если действительно все сами собираете, то, конечно, никаких вопросов. Паранойя — это всегда ограничения. Мы жертвуем неким комфортом и/или временем, чтобы потешить своё тёплое уютное чувство паранойи. Но это становится самообманом и фарсом, когда паранойя включается иногда. Нельзя быть чуточку параноиком. «Чуточку-параноики» — это просто самообманщики.
            Кстати, забавная сейчас наблюдается тенденция. Отсутствие социальной жизни и некоторой активности (неприемлемой для параноиков) последнее время записывает параноика в ряды «подозрительных личностей». Параноиков перестаёт защищать мощный механизм принципа неуловимого Джо, а после этого уже трудно наверняка утверждать кто более уязвим статистически: представители малочисленной группы странных людей или обычные люди без заморочек, коих легион.
            Как большой эксперт по всему, к чему не имею никакого отношения, могу озвучить свою точку зрения относительно идеального параноика.
            Идеальный параноик — это человек с «файрволом» в голове.
            — На одной стороне «файрвола» простой стандартный обыватель, присутствующий в соц-сетях, пользующийся виндой, бесплатным антивирусом и единым паролем «1a3s5^7*» на всех своих обывательских эккаунтах.
            — На другой темная личность, никак не связанная с первой, сидящая за шелухой тора и самописным паровозиком собственных VPN. Отдельный ноут, выглядящий поломанным, и система на двусмысленно зашифрованной флешке используется для непрерывного формирования запасных вложеных путей анонимизации. Такой человек виден в сети как множество несвязанных личностей-аватаров, выглядящих как давно созданные, неумело заполненные и редко используемые профили в разных сетях и сервисах на разных языках и с разными легендами.
            Этому идеальному параноику так трудно живется, что сложно даже представть зачем он такой нужен, кроме как чтобы проворачивать какие-то темные высокооплачиваемые делишки… но раз уж эти делишки темные, то есть ои или нет их не понятно. Как и тех людей за внутренним файрволом.


          1. apollo2k4
            10.02.2017 10:38

            Очень хотел бы посмотреть как вы соберёте Chromium отключая все «шпионские штучки».


            1. redmanmale
              18.02.2017 20:57

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


              Опенсорсные .net приложения собираются легко и непринуждённо (если написаны нормально), с остальными приходится как минимум повозиться.


        1. dom1n1k
          10.02.2017 00:57

          Отличная логика — давайте променяем гипотетические уязвимости и мифическую слежку неизвестно кого (откуда этот некто вообще знает, что данная программа стоит у меня на машине?) на почти гарантированную корпоративную слежку (но это же не страшно, они хорошие).


          1. trapwalker
            10.02.2017 02:54

            Корпоративная слежка — это не слежка скорее, а сбор информации обо всех подряд. И вас конкретно, думаю, гугл как-то особенно не выделяет… наверно. Почему тогда вы не рассматриваете такой же вариант в случае с этим опенсорсным ПО, а сразу перешли к рассмотрению индивидуальной угрозы от некоего гипотетического «некто».
            Это совершенно разные ероятности. «Корпорация против всех» и «некто против вас» — это не всё, есть еще «многие против всех, до кого удастся дотянуться». Здесь я подразумеваю неких злодеев, которые рыщут по интернету в поисках уязвимостей с целью выгоды. И эта угроза выглядит куда более реальной, чем подозрение гугла в том, что он хочет завладеть вашей кредиткой или ресурсами компа для рассылки вирусов или ещё чем-то, что может составить вам проблему, а ему (гуглу=) выгоду.
            Проиллюстрирую натянутым среднепотолочным примером.
            Некто написал скрипт, который ходит по репозиториям на гитхабе и ищет конкретный набор 0-day уязвимостей по коду. Скрипт выдал много-премого проектов, которые были всячески отфильтрованы, и составлен топ по популярности среди пользователей (а не программистов; то есть у них небольшое коммьюнити). Осталось как-то заполучить базу пользователей. Например взломать соц-инженерией одного из мантейнеров или как-то еще заполучить, скажем, логи багтрекера или системы автообновления… Да, это не аудитория гугла по объёму, но это реальные сотни и тысячи машин, которые можно заполучить под контроль. Гипотетически, конечно.


            1. dom1n1k
              10.02.2017 04:01

              Критичная ошибка всех подобных рассуждений — олицетворение Гугла или Яндекса в виде такого цельного существа, которое действует логично и непротиворечиво. Гугл не будет делать то, гуглу не выгодно сё, гугл не охотится на кредитку…
              Гугл — это многие-многие тысячи людей, среди которых могут оказаться такие, кто не прочь воспользоваться своим служебным положением. И я не знаю, кто именно из них имеет физический доступ к серверу, на котором будет лежать моя гипотетическая переписка. Понятно, что лично Брину я нафиг не упал. А вот какому-нибудь админо-стажеру Хозе или Абдуле — может быть, кто знает? И не надо мне рассказывать про права доступа и политику безопасности — это красивая теория, жизнь обычно менее предсказуема.

              Про соц «взлом» мейнтейнера — это какие-то дикие фантазии. Если софтина не имеет бэкдоров, то откуда вообще у него такие списки? Он что, знает IP-адреса своих пользователей? Рутовые доступы имеет? Бред. КПД такого бизнеса будет даже не знаю в каком знаке после запятой, для злых хакеров есть куча более продуктивных полян.

              Картина примерно такая: я боюсь, что мне на голову упадет метеорит (вероятность 1e-6%), поэтому пойду и добровольно сяду в тюрьму.


              1. trapwalker
                10.02.2017 09:37

                Гугл — это многие-многие тысячи людей

                Ок. Тут я с вами согласен.
                Но так однозначно сравнивать вероятности взлома с того или иного вектора… Попахивает когнитивными искажениями. Майнтейнеру не нужны списки пользователей, он билдит бинарь, который пользователи тянут сами и запускают у себя.доверяя полностью. Опять же, вы, наверно билдите сами после ревью исходников, но большинство берет бинарные сборки, особенно для винды.
                Да и в целом вы меня не так поняли. Я не пытаюсь убедить, что гугл безопаснее Mahou. Я пытаюсь сказать, что не всё так просто и однозначно, что любая паранойя должна быть консистентной и перестраховываться от метеорита катаясь на автомобиле по городу — это не логично.


        1. BladeMight
          10.02.2017 01:46

          у которого слишком мелкое коммьюнити

          1 чел. но


          чтобы вычесать оттуда большинство уязвимостей

          как видите здесь вычесывает :)


          https в автообновлении

          Чем опасно подключение к GitHub'у, которое только загружает данные о новой версии?


          и этот продукт в умелых руках становится реально опасным шпионом

          Ну дык Open-Source же, что хочешь то и делай(сам).


          обходитесь собственными сборками хромиума после личного ревью каждого апдейта

          Угадал — это Я, а еще свои сборки Nightly и Servo :)


          1. trapwalker
            10.02.2017 03:01

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


            1. am-amotion-city
              14.02.2017 13:55

              В ветке про софт для windows этот тред особенно доставляет, конечно :)


              Винду эти умники тоже ручками пересобирают, после каждого апдейта, интересно?


              1. sumanai
                14.02.2017 17:37

                Пересобирать сейчас можно только ядро XP, да и то без апдейтов и даже последних сервис паков. Печаль ((
                Ну или использовать ReactOS, где есть простор для компиляции ))


        1. Al_Azif
          12.02.2017 04:18

          Вы наверное не застали, или просто не помните, как Punto Switcher сам обновился у всех, у кого были запрещены обновления.
          Ещё раз — в топку программы с такими сюрпризами.


          1. trapwalker
            14.02.2017 22:46

            Действительно не застал. Или, впрочем, не заметил. Давайте опустим вопрос о том, нужно ли включать автообновление софта, особенно если вы этому софту уже доверились, установив его.
            Конечно обновляться, если обновления отключены в настройках — это тот еще зашквар. Однако я не имел чести послушать другую сторону. Я не хочу гадать ошибкой это было, или закрытием критической уязвимости, которая показалась авторам важнее галочки настроек, или интерфейс настроек был плохо локализован и галочка подразумевала меньшую степень категоричности…
            То, что одна прога обновилась без спросу никак не меняет вероятности, ее вредоносного использования авторами или посторонними лицами. По крайней мере корреляция надумана и не доказана. Суть — предрассудки. Закрытое ПО под виндой по определению может в один прекрасный день проснуться и сделать всё что угодно.


            1. sumanai
              14.02.2017 23:42

              Закрытое ПО под виндой по определению может в один прекрасный день проснуться и сделать всё что угодно.

              Как и закрытое ПО под любую другую ОС.


            1. Al_Azif
              19.02.2017 12:29

              Вопрос не в этом.
              Это программа, которая по сути является кейлоггером.
              И _любое_ нестандартное поведение заставляет задуматься — «а что там ЕЩЁ заложено интересного»?

              Понимаете, когда как-нибудь вечерком у вас снимут пару штукарей с кредитки — вы наконец задумаетесь о том что по сути ваши данные ничем кроме честного слова производителей(весьма ограниченного лицензией) — не защищены.
              А цели производителей почти всегда не совпадают с целями потребителей.


      1. Aingis
        10.02.2017 13:05

        Да всё банально: для того же для чего и другие 100500 мелким программ, которые многие ставят. Распространять свой поиск/Яндекс.Браузер. Не будет Яндекса, будет Мэйл.ру или Гугл.


    1. Shifty_Fox
      09.02.2017 19:51
      +1

      Вот я к примеру тот самый пользователь который ушел с Punto Switcher на Mahou. Тут ведь дело не в том что Mahou умеет делать, а в том, чего она не делает:
      Не зависает раз в месяц-два, полностью сбрасывая настройки, из за чего нужно выставлять их заного.
      Не вылетает на большой нагрузке на ввод, переключение окон и т.п. (Раз в 2-3 дня мой Punto Switcher стабильно вылетал)
      При установке не просит поставить браузер и еще сопутствующего софта.
      При обновлении не просит поставить браузер и еще софта.

      Ну я прямой функционал который все таки Mahou делает, работает стабильно и без проблем, за что автору спасибо.


      1. Hormiga
        10.02.2017 11:25
        -1

        > При установке не просит поставить браузер и еще сопутствующего софта.
        За исключением 250-мегабайтного фреймворка


        1. Al_Azif
          12.02.2017 04:45

          Который и так у всех есть, и ставится виндой автоматом…


    1. AndreyDmitriev
      09.02.2017 20:56
      +1

      Я пробовал Punto несколько раз — там предполагается наличие английской en-us раскладки, которая у меня не устновлена. А когда сочетание русская/немецкая, то там были какие-то проблемы. Я, впрочем, последние версии не смотрел, может всё стало хорошо.


      1. BladeMight
        10.02.2017 01:48

        В Mahou — неважно какие у Вас раскладки, просто выберите нужные в настройках.


    1. dixi
      10.02.2017 01:38

      Такое ощущение, что Яндекс давно забросил PuntoSwitcher и разве что периодически ухудшает его: )


      1. trapwalker
        10.02.2017 03:05

        Тоже своего рода стабильность…


    1. BladeMight
      10.02.2017 01:40

      автопереключение

      В Mahou вообще авто-переключения нет! Зачем черный список для функции которой не существует?


      Почему такая жесткая экономия места в интерфейсе

      Ну это первый мой интерфейс на C#, и заточен он был именно под ширину английских строк, поэтому русские сокращены кое-где.


      Если разнести настройки по вкладочкам

      Надо будет почитать и поглядеть как это выглядит...


    1. BladeMight
      10.02.2017 02:08

      Какие основные отличия от Punto Switcher'а?

      1. Размер (Папка PuntoSwitcher — 6.51 МБ, Папка Mahou — 362 КБ).
      2. Портативность(не требует установки).
      3. Возможность переключать по любым раскладкам(даже по собственно созданным).
      4. Ничего никуда не отправляет
      5. Не просит установить дополнительный софт, расширения и т.д.
      6. Open-Source.
      7. Другие функции(авто-обновление, игнорирование символов при конвертации, и т.д.).


      1. BladeMight
        10.02.2017 02:16
        +1

        А еще в Punto Switcher мне надоедала надпись — "Отмена невозможна", в Mahou такой — нет и конвертирует везде!


      1. trapwalker
        10.02.2017 03:15
        +2

        1. Вы серьёзно? Кого сейчас волнует размер? Да к тому же эти жалкие 10 метров. Нет, ок, похоже вас-таки волнует, но, черт подери, почему?! Тем более 10 метров — это действительно мелчи. Я надеюсь на первое место этот пункт попал не по важности для вас.
        2. Зачем портативность программе, которая вешает системные хуки и висит в трее? Я бы назвал это скорее минусом, поскольку это просто очередной уход от стандартизации. Пользователю надо как-то по-особенному работать с вашей прогой. Это в век удобных аппсторов, репозиториев и прочих достижений прогресса.
        3-6. Ок
        7. Автообновление у пантосвитчера, вроде есть, или вы о чем? Игнорирование там тоже есть, иначе как бы они делали автоконвертацию?


        1. Shifty_Fox
          10.02.2017 04:52

          OpenServer тоже прописывается в автозагрузку, если в его настройках поставить галочку, и при этом portable.
          Инсталлятор для программы написать — дело десятое, а наличие вообще нативной портабельности это плюс.


        1. 3aicheg
          10.02.2017 05:38
          +1

          Возможно, я один такой извращенец, но я люблю, когда программа маленькая, не требует установки и хранит все свои настройки рядом с собой — тогда её можно положить в Дропбокс и использовать одинаково и на компьютере дома, и на втором компьютере дома, и на третьем компьютере дома, и на работе ещё, и никакой маеты с удобными аппсторами, синхронизацией настроек между компьютерами, и переустанавливать не надо, даже если винду переустановил. И маленький размер важен даже не потому, что места в дропбоксе жалко, а потому, что вот надо, допустим, прямо щас выключить компьютер и уйти — а оно только что автообновилось, ага, теперь синхронизируется. На жалких 10 метрах дропбокс может иной раз запросто протупить минуты две-три.


          1. trapwalker
            10.02.2017 10:08

            Вот даже не знаю с чего начать… Всё прекрасно в это комментарии. Я понимаю, почему описанный вами сценарий непрофильного использования дропбокса может быть удобнее. Но это же не от жизни хорошей, а от изначальных проблем с реализацией всей этой кухни.
            Почему опасно держать бинари на дропбоксе, думаю, вам объяснять не надо. Но своим лайфхаком вы, простите, наколхозили распределенную файловую систему и держите на ней часть софта. очевидно, что это не полностью и не единообразно решает ваши проблемы.
            В правильном, кстати, направлении в этом плане идет андроид. Почему в винде никак не перейдут к нормальной дистрибуции ПО я не знаю. В убунте давно есть волшебный и великолепный apt, и он прекрасен. Абсолютно всё, что нужно для жизни ставться одинаковым образом, удаляется одинаковым образом, хранит настройки одинаковым образом… Экономить размер программы, чтобы они влезали на дропбокс, чтобы решить часть проблем деплоя и синхронизации окружения между разными компами… Это всё половинчатые кустарные решения от сохи. Это как лайфхаки «как сделать люстру из бутылки и миски».

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


            1. rg_software
              10.02.2017 10:51

              Какая-то странная претензия: от «автор делает удобно для хранения в дропбоксе» к «в винде не сделали нормальную дистрибуцию ПО».

              Ну так автор же не виноват, что в винде не сделали нормальную дистрибуцию ПО! Вот именно поэтому и спасибо автору от нас за счастливую работу софтины из дропбокса. Когда все поголовно программы будут скачиваться обновляться из аппстора, тогда и будем предъявлять претензии, а пока да, вот так.


            1. 3aicheg
              10.02.2017 11:29

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


              1. trapwalker
                10.02.2017 14:10

                Я не предлагал ни от чего отказываться. Система дистрибьюции уже есть. Есть майкрософтовский стор. Я не пробовал, может на него трудно попасть?
                Правильно сделанный инсталлятор — это тоже довольно удобно. Для автообновления нужно всего лишь скачать свежую версию инсталлятора и запустить на «тихую» установку.
                Не хватает только облачного хранения настроек.
                Кстати, а почему не вошло в практику хранить настройки приложения на специально выделенном почтовом ящике? Это ж готовое бесплатное облачко для хранения конфигурации и небольшого количества данных.


                1. ivvi
                  10.02.2017 15:23

                  У меня на рабочем ноуте нет прав админа и установки софта. Портабельный переключатель раскладки — как раз то, что доктор прописал в этом случае.


                1. sumanai
                  10.02.2017 16:31

                  Я не пробовал, может на него трудно попасть?

                  1) Он есть только в десятке
                  2) Требует аккаунта в МС.


        1. BladeMight
          10.02.2017 05:44

          1. Когда можно сделать почти то же самое при меньшем размере — не так уж и плохо.
          2. А вы видели сколько ключей в регистре вешает PS? А Mahou все настройки хранит в Mahou.ini, а сниппеты(автозамена) в snippets.txt в папке из которой запущен.

          Игнорирование там тоже есть, иначе как бы они делали автоконвертацию?

          7. Я говорил об этой функции.


        1. Al_Azif
          19.02.2017 12:37

          Меня волнует. В своё время специально искал замену Punto, и нашёл её, но тут уже похоже тормоза WinAPI — раскладка переключается не моментально а с тормозами и почему-то иногда с «как-бы зажатым шифтом».
          Например очень сильно нужно запоминание layout per window, потому что переключаться тудасуда между MSVS и телеграмом в котором идёт общение на русском — просто тупо задрало.
          Во время рендера или процессинга юнити, когда комп стоит раком — переключение занимает до 3-х секунд. Это нонсенс.

          Почему софт не может запомнить флаг — в какой он сейчас раскладке, в 2017-м году-то?


          1. sumanai
            19.02.2017 14:12

            А разве по умолчанию ОС раскладку для окон не запоминает? По моему, только в Win10 решили сломать запоминание, но это исправляется настройкой.


  1. boblenin
    09.02.2017 20:09
    +1

    О! Надо попробовать погонять, а то capslang и похожие переодически приводили к тому, что крэшился lync или outlook.


    1. maaGames
      10.02.2017 07:34

      А у меня крашится сам capslang, но не всегда и только при работающей Android Studio.(


  1. budda
    09.02.2017 21:00
    +1

    Жалко, что только 2 раскладки поддерживает


    1. BladeMight
      10.02.2017 01:33

      Могу добавить в будущем еще.


      1. budda
        10.02.2017 09:29
        +1

        да, хорошо бы было, для граждан пост ссср пространства актуально, так как нужен русский+ национальный + английский


        1. rg_software
          10.02.2017 10:53

          У меня несколько раскладок на компьютере, две из которых (рус/англ) использую чаще всего.
          В Windows поставил переключение по кругу на Alt+Shift (ну, то есть ничего не менял) плюс в Punto / Mahou переключение рус/англ по Caps lock. То есть почти всегда пользуюсь Caps lock, а если нужна редкая раскладка, то уже включается стандартный Windows механизм.


          1. ivvi
            10.02.2017 15:26

            Личное имхо: ставить рус/англ на одну клавишу — не очень хорошая идея, так как нет способа по состоянию клавиши определить какая раскладка активна в данный момент. Или вы смотрите по тому, горит светодиод или нет?
            Имхо, разнесение на разные Ctrl (например) лучше в этом плане.


            1. rg_software
              10.02.2017 22:32

              Да, это правда, вопрос привычки.


          1. 3aicheg
            10.02.2017 19:24

            А ВМЕСТО КАПСЛОКА ШИФТ ДЕРЖИТЕ?


            1. rg_software
              10.02.2017 22:31
              +1

              ДА, КСТАТИ, НЕ ТАК ЧТО БЫ СОВСЕМ НЕУДОБНО. Мизинец на шифте, несколько букв пропадает, правда :)


            1. Taciturn
              11.02.2017 12:00

              Alt+CapsLock, например. Или другой модификатор.


  1. Kalobok
    09.02.2017 21:04

    приделал очистку списка клавиш по кликам мыши

    Я правильно понимаю, что если фокус изменился при помощи TAB, то список не очистится?


  1. format1981
    09.02.2017 21:58
    +2

    Я сейчас punto switcher использую только для того, чтобы переключать раскладку по одной клавише. Настроил русский на правый Ctrl, а EN на правый Shift. В вашей программе есть такая возможность?


    1. BladeMight
      10.02.2017 01:32

      Да, вот но пока что только для L/R Ctrl.


  1. redmanmale
    09.02.2017 22:49
    +1

    Весьма любопытная замена пунтосвитчеру, который пришлось выпилить после появления к нему вопросов. Спасибо!


    1. dartraiden
      09.02.2017 23:43
      +1

      А каких именно вопросов, если не секрет?

      Лично у меня к пунто вопроса два:
      — разработчики отказались чинить баг «при перезапуске проводника иконка пунты появляется, даже если в настройках указано её скрывать» (оказалось проще убрать эту настройку совсем, чем исправлять)
      — в последней версии мало того, что адово тормозит окно настроек, так невозможно играть в 3D-игры режима «в окне» — ощущение, что у мыши DPI вырастает в разы, малейшее движение даёт поворот камеры чуть ли не на 360 градусов.


      1. trapwalker
        10.02.2017 03:18

        А почему вы не занесете свои игры ему в черный писок, чтобы он не работал при них?


        1. dartraiden
          10.02.2017 03:41
          +1

          Потому что он мне нужен и в играх (в тех, где я активно общаюсь во внутриигровом чате). Проще оказалось откатиться на старую версию и забыть про обновления.

          Пожалуй, единственное неоспоримое достоинство пунты перед аналогами — скромные требования (потребляет 3 мегабайта оперативной памяти)


          1. BladeMight
            10.02.2017 05:49

            (потребляет 3 мегабайта оперативной памяти)

            Если так хотите Я могу сделать чтобы Mahou потреблял ~1МБ ОЗУ когда скрыто главное окно.


      1. rg_software
        10.02.2017 10:55

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


  1. Cryvage
    09.02.2017 23:14

    Пару минут в программе и уже полезли баги.
    Пишу «asdfпрол» выделяю, нажимаю scroll — преобразуется в «фывапрол», хотя по идее должно инвертироваться — «фываghjk».
    Набираю несколько букв «z», выделяю, переключаю раскладку на русскую, нажимаю scroll — остаётся одна буква «z». Если вместо латинской буквы набирать русскую и сделать всё по той же схеме, то остаются, иногда две буквы а иногда три. Зависимость пока не выявил.
    Если совместить и попытаться конвертировать что-то вроде «йййqqq», то баги суммируются и получается «ййййй» — приводит всё к одному языку и одну букву съедает.
    Если написать слово и переключить раскладку, то с помощью pause его уже конвертировать не получится, даже если переключить раскладку обратно. При этом shift+pause работает, хоть и не с первого раза.
    Ещё, когда конвертируешь выделенный текст, буфер обмена очищается. Не знаю, баг ли это, или фича, но лично мне это очень мешает.
    З.Ы. не знаю почему пропадают одинаковые буквы, но первый баг явно связан с тем, что при конвертации выделенного текста программа ориентируется на текущую раскладку, и пытается текст, написанный в текущей раскладке преобразовать к противоположной. Имхо, при конвертации именно выделенного текста раскладка вообще должна игнорироваться, а всегда должно быть преобразование каждого выделенного символа к символу противоположной раскладки. И, мне кажется, саму раскладку клавиатуры, при этом не нужно переключать. Хотя лучше это сделать опциональным, и вынести в настройки.


    1. Cryvage
      09.02.2017 23:34

      Выяснилось, что если снять галочку с CS-Switch то конвертация выделенного начинает работать правильно. И одинаковые буквы в этом режиме не пропадают. В таком виде уже вполне можно пользоваться. Ещё бы очистку буфера как-то отключить.


      1. BladeMight
        10.02.2017 01:23

        Очистка буфера восстанавливает пока что только текст. Доступно с версии v1.1.1.0.


    1. dartraiden
      09.02.2017 23:37

      Пишу «asdfпрол» выделяю, нажимаю scroll — преобразуется в «фывапрол», хотя по идее должно инвертироваться — «фываghjk».
      Это, увы, частый недосмотр у авторов подобных программ. Точно такой же баг в SimpleSwitcher (утилита аналогичного назначения). Поэтому, до сих пор сижу на пунто.


      1. BladeMight
        10.02.2017 01:19

        В Mahou есть такая функция — КВ-Ключ+


        1. dartraiden
          10.02.2017 14:56

          О, тогда, пожалуй, дам Mahou «второй шанс». Пулл-реквесты, кстати, принимаете? С орфографией в исходниках, локализациях и readme тихий ужас.


    1. BladeMight
      10.02.2017 01:25

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

      Да но символы есть в обоих раскладках, именно для них и создан ориентир по текущей раскладке. Подробнее


  1. ClearAirTurbulence
    09.02.2017 23:26

    Подсказка текущей раскладки возле курсора мыши + настройки внешнего вида подсказки.
    Подсказка текущей раскладки возле текстового курсора(каретки) + настройки внешнего вида подсказки для каждой раскладки.

    Эээ… скачал последнюю версию, где упомянутый функционал? Поднимите мне веки…



  1. dartraiden
    09.02.2017 23:37

    <Извиняюсь, ошибся веткой...>


  1. Gradarius
    10.02.2017 01:26

    Еще не юзал, но судя по описанию это на порядок лучше чем Punto Switcher. Обязательно порекомендую, после личного испытания.


  1. melchermax
    10.02.2017 01:26

    А версия под Линукс будет?


    1. BladeMight
      10.02.2017 01:26

      Может быть когда на Линукс переберусь :)


    1. Jogger
      10.02.2017 05:51
      +1

      Писать на дотнете программу, которая всё равно сводится к винапи… Я единственный, кому это кажется довольно странным занятием?

      простите, ошибся веткой. это должен был быть отдельностоящий комментарий…


      1. rum
        10.02.2017 09:45

        А Вы бы стали и окошки на WinApi рисовать? =)


        1. Jogger
          10.02.2017 16:13
          +2

          С таким функционалом как в статье? Запросто. Диалоговое окно, создаётся в любом редакторе ресурсов, и подключается.


        1. rdifb0
          13.02.2017 13:27

          Собрать диалог в каком нибудь редакторе ресурсов совсем не проблема.


      1. pfzim
        13.02.2017 13:27

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

        А так отличная программа. Была раньше похожая, FF12 называлась. Очень нравилась.
        Пользовался функцией замены буфера обмена.


        1. BladeMight
          13.02.2017 13:27

          Ну это все потому что я хотел:


          Все началось с того что я захотел программировать на C#

          Поэтому и фреймворк потянул, а так я и в С могу тоже самое написать.


  1. sens_boston
    10.02.2017 09:45

    Идея, я считаю, просто замечательная, и давно назревшая! Сам было подумывал об этом, но как-то руки не доходили. Спасибо!

    Опробовал, сразу появилось несколько замечаний (позже открою issues на github-е):

    • не работает в консоли (Punto работает)
    • не отрабатывает переключение при написании имен некоторых русских веб-сайтов (в строке адреса браузера), видимо, нужно подправить алгоритм, и учитывать, где идет ввод
    • UI настроек, конечно, не очень — почему бы не скопировать Punto, но, естественно, в своем дизайне?
    • вообще, было бы чудесно перекрыть один к одному всю функциональность Punto (за исключением шпионских функций ;) )
    • не хватает tray иконки с флагами


  1. Ambyte
    10.02.2017 09:47

    Хочу попиарить также свою разработку — программу EveryLang
    Переключает раскладку в автоматическом и в ручном режиме, сама формирует правила автопереключения.
    Работает с любыми установленными в системе раскладками, гибко настраивается и стабильно работает.
    Также имеет функцию переводчика, проверки орфографии.
    В платной версии есть автозамена текста, менеджер буфера обмена, с возможностью копировать и вставлять текст с помощью только кнопок мыши, дневник ввода текста, индикаторы раскладки на указателе мыши и в позиции текстового курсора, функция smartclick — удобное управление выделенным текстом с помощью только мыши.


  1. AndreyDmitriev
    10.02.2017 10:00

    deleted comment


  1. induction
    10.02.2017 10:04

    Каждый программист должен написать в своей жизни самую крутую убийцу notepad.exe (с)
    Хорошо хоть не на deplhi


    1. rg_software
      10.02.2017 10:58

      Да вот смейтесь сколько угодно, а я в своё время не нашёл утилиты, которая бы банально по Caps lock переключалась между двумя раскладками из списка, больше ничего мне не нужно. Вот только Punto switcher. До этого был ещё Arum switcher, но, к сожалению, в Win64 не работает.


      1. Aingis
        10.02.2017 13:30

        …утилиты, которая бы банально по Caps lock переключалась между двумя раскладками из списка…

        ReCaps же.


        1. rg_software
          10.02.2017 13:41

          Спасибо, если бы ещё ссылка на программу работала :)
          Впрочем, там тоже минус — висит в трее, нельзя убрать, если правильно понял. Но про это пожелание не упоминал, виноват.


    1. Hormiga
      10.02.2017 11:35

      Это чем хорошо?
      Просто интересно, чем вам так не понравился Delphi, чтобы его заменять на более громоздкий .NET?


      1. induction
        10.02.2017 12:13

        Мне оба нравятся, есть еще Visual Basic. Просто «маленький размер, скопировал в dropbox и пользуешься откуда угодно» и «для ее работы нужен .Net 4.0 и выше» немного слух режет.


        1. Hormiga
          10.02.2017 12:24
          +1

          Я согласен, мне тоже идеологически не нравятся .Net приложения и (отвлеченно) необходимость ставить юзерам по 4 фреймворка, т.к. обратной совместимостью никто не озаботился.

          Но если бы программа была написана, например, на Delphi 7, она, учитывая все же не очень богатый функционал, влезла бы в 700 Кб и честно не требовала бы никаких зависимостей.


          1. induction
            10.02.2017 12:30
            +1

            В 700 это уже с ухищрениями. На обычном VCL такое бы весило 2 ~Мб
            Я к тому что если уж дергать именно WinAPI, то из Сей или Сей с плюсами.


            1. KonstantinSoloviov
              10.02.2017 12:50

              Как вариант wxWidgets — довольно легонький фреймворк над WinAPI притом кроссплатформенный


            1. Jogger
              10.02.2017 19:59

              WinAPI вполне себе дёргаются и из паскаля. Поначалу немножко непривычно использовать паскалевский синтаксис для винапи, но привыкаешь.


              1. Nikobraz
                10.02.2017 22:10

                После того, как писал на Делфи и Лазарус, вполне нормально выглядит


          1. Nikobraz
            10.02.2017 22:12

            У программ написанных на Delphi 7 есть маленький недостаток, он требует права на запись в C:\ProgramFiles\Borland\Delphi 7


  1. Nikobraz
    10.02.2017 22:09

    С 3 раскладками нормально работает? А то, в Punto Switcher нужно Break нажимать 3 раза. Бесит. Была бы возможность в какую раскладку переключать безусловно, или разные сочетания клавиш для перевода в разную раскладку.


    1. BladeMight
      13.02.2017 13:30

      Да Mahou может переключать только по выбранным в настройках или по циклу(как Windows) раскладкам.


  1. Muxlevator
    12.02.2017 09:41

    А вот мой «убийца notepad». Умеет переключать раскладку только по хоткею, переключать раскладку по одной клавише (я пользуюсь правый/левый ctrl), показывать текущую раскладку в мышином курсоре, показывать текущую раскладку цветом рамки окна, показывать текущую раскладку led'ом scroll-lock'а. На чистом c++ без зависимостей.


  1. popstas
    13.02.2017 00:24

    Можно ли сделать переключение только по Alt?


  1. andropol
    13.02.2017 13:33

    У меня пунто не работает с оффисными приложениями на вин10.
    Тут чуть лучше, но при попытке сконвертировать выделенный текст в 2016м ворде вылетает…


    1. sens_boston
      13.02.2017 21:39

      У меня все работает именно в таком сочетании: Windows 10, Office 2016, Punto (специально вот только что проверил).