Встроил индикацию раскладки непосредственно в саму клавиатуру.
Встроил индикацию раскладки непосредственно в саму клавиатуру.

«Я — русский!»‑ спел недавно известный певец. Да и я, после 20 лет пользования клавиатурой, наконец‑то, устал вечно поправлять текст, набранный не в той раскладке клавиатуры (в голове держать всё невозможно!) и сделал индикацию текущей раскладки. Казалось бы, мелочь, а приятно.

А раньше как бывало? Оторвал взгляд от клавы, посмотрел на экран… «Фу, чёрт! Не та раскладка!» Стираешь то, что набрал непосильным трудом и заново набираешь тот же текст.

Вы скажете: «Не интересное решение! Есть же замечательная программа Punto Switcher! Она может автоматически исправлять набранный текст в нужную раскладку.» Но всегда оставалась проблема набрать специальные символы независимо от языка ввода. И вот тут‑то Punto Switcher начинал ошибаться.

А нельзя ли поставить прямо возле клавиш небольшой экранчик OLED (благо таких стало в продаже много) и выводить на него текстом текущую раскладку аж по всем языкам мира? Можно. Но как показал мой дальнейший опыт, увидеть свечение боковым взглядом проще, чем вглядываться в надпись на экранчике. Кроме того, обычно мало кто пользуется одновременно более чем тремя языками раскладки. Да и по цене решение со свечением светодиодами будет гораздо дешевле.

Вот я так и пошёл по этому простому пути. И замутил банальную схему:

Схема индикации раскладки клавиатуры.
Схема индикации раскладки клавиатуры.

Как видим, на схеме главным элементом является китайская «копеечная» микросхема‑преобразователь из usb в rs232 ttl‑уровней CH340C. Можно использовать подобный преобразователь любого другого производителя, лишь бы у него были выведены сигналы TX, RX, RTS, DTR.

Когда такой преобразователь подключаем к компьютеру через USB, то в системе появляется новый COM‑порт с каким‑нибудь номером. И чтобы его идентифицировать среди прочих COM‑портов, на схеме я замкнул между собой выводы TX и RX. Теперь, посылая из обслуживающей индикацию раскладки программы какой‑нибудь проверочный байт, можно найти тот самый «родной» COM‑порт.

Сигнал RTS служит для индикации одного дополнительного языка раскладки (например, свечением красного светодиода), а DTR — для индикации дополнительного второго языка (например, свечением зелёного светодиода). Полное отсутствие свечения будет означать «индикацию» основного языка раскладки.

Обслуживающую индикацию раскладки программу для ОС Windows 7 и выше, я написал на языке C# (ссылки на неё внизу статьи). И её можно поместить в автозагрузку. Для этого нужно нажать комбинацию клавиш WIN+R. Откроется окно «Выполнить». Набрать там в строке «shell:startup» без кавычек, и нажать ENTER. В открывшейся папке разместить программу или ярлык на неё.

Такой командой попадём в папку Автозагрузка
Такой командой попадём в папку Автозагрузка

При загрузке системы программа ищет «родной» COM‑порт, устанавливает с ним связь. Далее узнаёт код текущей раскладки и помещает его первым элементом массива в оперативную память. Если во время работы пользователь переключит раскладку, то код новой раскладки станет вторым элементом массива. Также и с третьим языком раскладки. В дальнейшем в процессе текущего сеанса работы, при переключении пользователем, «знакомая» программе раскладка будет подсвечена (или не подсвечена, если раскладка является основной) красным или зелёным светодиодом.

Если в системе появится ещё одна, четвёртая (и больше) раскладка, то она никак не будет подсвечена и её легко станет спутать с основной раскладкой. Но, повторюсь, не думаю, что большинство людей использует в жизни более чем три раскладки одновременно.

Обратите внимание! Если открываем в операционной системе окно «Настройки языка», то моя обслуживающая индикацию раскладки программа временно перестаёт реагировать до тех пор, пока не закроется окно настроек языка.

Обслуживающая индикацию раскладки программа сидит в трее.
Обслуживающая индикацию раскладки программа сидит в трее.

Обслуживающая программа сидит в трее в виде значка. И при нажатии на значок правой кнопкой мыши появляется меню из двух команд: RESET и EXIT. Команда RESET бывает нужна для перестройки цветов, если после настроек языка хочется сбросить текущие настройки цвета. Ну а команда EXIT – выгрузка программы из трея.

Меню состоит из двух элементов.
Меню состоит из двух элементов.

Вся «соль» кода программы представлена этим непрерывным потоком, при котором происходит «сканирование» текущей раскладки:

        private static void portTask()
        {
            IntPtr _currentKeyboardLayout = IntPtr.Zero;

            KeyboardLanguageLEDPort klp = new KeyboardLanguageLEDPort();

            while (true)
            {
                if (fReset)
                {
                    fReset = false;
                    klp.ClearLanguages();
                    _currentKeyboardLayout = IntPtr.Zero;
                }
                if (klp.CheckPort() == false)
                {
                    klp.portName = klp.PortFind();
                }
                else
                {
                    try
                    {
                        var newLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero));
                        if (_currentKeyboardLayout != newLayout)
                        {
                            _currentKeyboardLayout = newLayout;
                            klp.AddLanguage(_currentKeyboardLayout.ToInt32());
                            klp.OnLedLanguage(_currentKeyboardLayout.ToInt32());
                        }
                    }
                    catch
                    {

                    }
                }
                System.Threading.Thread.Sleep(100);
            }
        }

Как видим, сканирование производится раз в 100мс и совсем не нагружает систему:

Программа не загружает систему
Программа не загружает систему

Ниже ссылка на программу индикации раскладки для среды Windows:

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


  1. Grey83
    02.12.2023 11:10
    +7

    Можно сделать немного проще:

    А исправлять введённый текст можно с помощью утилиты Голомина под названием Snoop (aka Опечатка). Архив с портабельной программой, её исходниками и документацией весит чуть меньше 54кБ.

    Все настройки находятся в ini-файле. У меня его содержимое выглядит вот так:

    [Layout]
    ;CAPS<>normal
    Table1=ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJKLZXCVBNMйцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm
    Table2=йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJKLZXCVBNM
    Key=  //Pause
    HotKey=19 //Pause
    
    [Layout]
    ;rus<>eng
    Table1=QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?qwertyuiop[]asdfghjkl;'\zxcvbnm,./`~!@#$%^&ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэ\ячсмитьбю.ёЁ!"ї;%:?
    Table2=ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,йцукенгшщзхъфывапролджэ\ячсмитьбю.ёЁ!"ї;%:?QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?qwertyuiop[]asdfghjkl;'\zxcvbnm,./`~!@#$%^&
    Key=‘ //ScrollLock
    HotKey=145 //ScrollLock
    Switch=1 //Автопереключение клавиатуры
    

    Индикацию раскладки в текстовом курсоре можно сделать утилитой langcursor весом менее 4кБ. Правда умеет показывать только английскую и русскую раскладки.
    Вот тут её презентовали когда-то: https://habr.com/ru/articles/138940/

    Недавно предлагали замену обоим упомянутым выше утилитам: https://habr.com/ru/articles/735792/


    1. HardWrMan
      02.12.2023 11:10
      +2

      Кто-то переизобрёл пунто свитчер? Я его ещё в 2003м видел. Но лично мне эти автопереключалки не нравятся, индикация полезнее и безопаснее (в плане считывания кнопок и складывания этого в память или, не дай Б-г, на диск).


      1. Wesha
        02.12.2023 11:10
        +1

        не дай Б-г

        Интересно, и почему отдельные граждане Бога за идиота считают? Типа если сказать "Бог", то Он увидит и обидится — а если одну букву вычеркнуть, то мало того, что от такого уродования своего имени не обидится (я б на его месте обиделся!), так ещё и "да не, это он не не про меня!" (хотя, если верить мануалу, он Ваши мысли читает и прекрасно в курсе, про кого это Вы).


        1. Grey83
          02.12.2023 11:10
          +5

  1. a-tk
    02.12.2023 11:10
    +38

    А можно освоить десятипальцевую слепую печать и смотреть на монитор, когда печатаешь, а не на клавиатуру...

    Время на освоение однозначно экономит годы активной жизни.


    1. Zara6502
      02.12.2023 11:10
      +10

      для меня этот способ не работает, я за клавиатурой с 1987 года и могу печатать только смотря на клавиши, до 2005 года учился раз в год примерно, менял кучу программ, в том числе недавно и онлайн какие несколько пробовал, проблема ровно одна - я печатаю под диктовку самому себе, а диктуя я медленно, когда смотрю на экран, то забываю печатать, отвлекаюсь на что-то еще на экране, перестаю диктовать и всё, приплыли. Так что все люди разные.

      ну и чтобы экономить коды нужно эти же годы тратить на набор текста, а я не так и много печатаю чтобы аж годы, в день и 10 минут нет. Я дольше на остановке транспорт жду и пешком хожу.


      1. qw1
        02.12.2023 11:10
        +12

        Купил клаву без гравировки, полностью чистую. За 2 дня научился печатать вслепую )))


        1. Zara6502
          02.12.2023 11:10
          +9

          еще я не умею плавать, сколько не учили и сам не учился, у меня странная плавучесть, жена на спину ложится когда на воде то половина тела над водой, она так любит отдыхать когда плавает, а я когда ложусь на спину, то я погружаюсь весь на 10 см примерно и могу так полежать секунд 30, я потом дышать что-то хочется, но и даже тут проблема, ноги тонут, тело стремится занять вертикальное положение и тонет еще быстрее. А еще я не умею играть на музыкальных инструментах вообще, меня тоже пытались учить на гитаре например.

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

          PS: у нас в серверной как-то поставили KVM с клавой QWERTY но без русских букв ))) я тоже печатал на русском, ну чуть медленнее и немного с ошибками, но печатал. Слепой ввод тут ни при чем.


          1. Pyku_He_oTTyda
            02.12.2023 11:10
            +3

            Я тоже до 49 лет тонул ровно так же, как и Вы, пока не пришел в бассейн учиться плаванию с тренером.

            У женщин плавучесть лучше, но это точно не основное в плавании:)


            1. Zara6502
              02.12.2023 11:10

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


        1. Firsto
          02.12.2023 11:10
          +2

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


        1. Tiriet
          02.12.2023 11:10
          +5

          А я в детстве просто накрыл клавиатуру почтовой коробкой. было так прикольно- глаза рефлекторно опускаются вниз, а там "Почта России" и такой когнитивный диссонанс интересный возникал. Первые два дня приходилось мучительно вспоминать, где нужная кнопка (бекспейс стал родным буквально за час- был самой главной клавишей :-)) Через три или четыре дня глаза перестали опускаться вообще, даже позывы к этому прекратились, а клавиши из картинок превратились в ощущения в пальцах. через неделю выкинул коробку, навык остался.


          1. DemVy Автор
            02.12.2023 11:10

            ЗдОрово! Я в детстве вообще не знал что такое компьютер. Тогда и слово то это только входило в оборот. Постоянно с клавиатурой пришлось взаимодействовать только с 2000 года, когда мне было уже 26 лет. Но чаще, всё же, рисовал мышкой печатные платы.


          1. Zara6502
            02.12.2023 11:10
            -1

            ну кто-то между небоскрёбами на тросе может перейти.


    1. Yuri0128
      02.12.2023 11:10
      +2

      Тут такое дело, - я при "слепой" печати и на монитор то не смотрю, а в правый нижний угол моника так тем более. И нарываюсь на те же грабли, только из-за скорости больше перенабирать приходится. Работаю на ноуте.


      1. DemVy Автор
        02.12.2023 11:10

        Если на ноуте работаете, то сбоку в USB разъём можно воткнуть данную штуку с достаточно яркими светодиодами. Думаю угловым зрением будет видно. А вообще, лучше всего видно свечение светодиодов, когда светодиоды впереди клавиатуры, а не сбоку.


    1. Aleshonne
      02.12.2023 11:10
      +3

      Ага, при поточном наборе текста помогает. А вот при редактировании — нихрена подобного. Особенно, когда нужно поменять прописную «с» на заглавную «С» (какая сволочь вообще придумала клавиатуру, на которой «Си» и «Эс» на одной кнопке!?).


      1. DemVy Автор
        02.12.2023 11:10
        +3

        Согласен с Вами! Тоже часто нарываюсь на этот трабл с клавишей Си.


    1. agendasshanty
      02.12.2023 11:10
      +3

      ну да, и за 20 лет то можно было научиться смотреть не на клавиатуру, а на то что пишешь, тем не менее интересная поделка


      1. DemVy Автор
        02.12.2023 11:10
        +1

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


        1. CzarOfScripts
          02.12.2023 11:10

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


  1. Grey83
    02.12.2023 11:10
    +1

    А по поводу комплекса из утилиты и платки со светодиодом: часто почти никогда не обращаешь внимания вообще на световую индикацию режимов клавиатуры. Особенно когда используется клавиатура с подсветкой.


    1. iliasam
      02.12.2023 11:10
      +2

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


      1. perfect_genius
        02.12.2023 11:10

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


      1. DemVy Автор
        02.12.2023 11:10
        +1

        Да, прикольная идея! Мне нравится!


      1. 0x131315
        02.12.2023 11:10

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

        А что касается электронной части - тут наверное проще всего будет запитаться от самой клавы, а в качестве сигнала взять состояние scroll lock (сам его диодик можно отрезать от питания, чтобы не горел), который все равно не несет никакой функции, и которым можно управлять программно, для чего уже есть готовый софт в windows, а в linix это вообще из коробки работает.


    1. DemVy Автор
      02.12.2023 11:10

      Не знаю, не имел опыта работать с клавиатурой с подсветкой. Но видел у других, что это обычно белое свечение. А у меня красное или зелёное или ещё какое можно поставить, но не обязательно белое. А во вторых, я заметил, что лучше всего видно свечение впереди клавиш. То есть чуть выше клавиш F5, F6. А вот переключение цвета подсветки всех клавиш в зависимости от текущего языка раскладки, думаю, - хорошая идея!


      1. Grey83
        02.12.2023 11:10

        Я зелёную предпочитаю, хотя моя позволяет выбрать из 7 цветов (любимая китайцами синяя - это вообще вне добра и зла).


        1. DemVy Автор
          02.12.2023 11:10

          Да ради бога, любой цвет подойдёт для этой функции) Кому как нравится.


          1. Grey83
            02.12.2023 11:10

            дело в том что от цвета подсветки и читабельность меняется (особенно на свету).
            Зелёный и жёлтый - самые заметные глазу цвета при одинаковой яркости свечения.


            1. DemVy Автор
              02.12.2023 11:10

              У меня в реальности на клавиатуре стоят красный и оранжевый, а не красный и зелёный. Потому что по току они почти одинаковые и я установил только один ограничивающий ток резистор на общем аноде. И остался недоволен: цвета сильно похожи на свету. А вот красный и зелёный принципиально отличаются и да, их хорошо видно.


              1. Grey83
                02.12.2023 11:10
                +1

                Моя MSI DS4100 позволяет включить следующие цвета подсветки: красный, зелёный, синий, жёлтый, голубой, фиолетовый и белый. 3 года уже в эксплуатации, некоторые клавиши пообтёрлись и символы на них недостаточно чётко читаются (T, Y J, C, B и N, хз почему именно эти)
                Белый мне как-то не очень (бледноват, что ли).

                До неё использовал Defender Oscar SM-660L. Там была богомерзкая синяя подсветка (да и у почти всех, которые юзал до неё), это мне надоело и я купил светодиоды (красные и зелёные, но остановился на зелёных; ещё в запасе всего штук 30, емнип, осталось) для замены подсветки и перепаял (правда корпуса пришлось немного доработать напильником, т.к. родные чуть меньше по габаритам были). Стало гораздо лучше пользоваться. Правда потом пробел развалился и я купил новую. Выбирал с точно такими же клавишами и наличием подсветки (были ещё почти точно такие же варианты, но MSI мне больше понравилась по обзорам).

                Defender до и после замены подсветки


                1. DemVy Автор
                  02.12.2023 11:10

                  Хорошая подсветка! Есть светодиоды с двумя свечениями внутри такого же размера 3 мм. А клавиатура MSI DS4100 выглядит футуристично и подошла бы для моего решения! Спасибо! Деньги будут, куплю себе такую же клаву и переделаю подсветку под свою утилиту.


                  1. Grey83
                    02.12.2023 11:10

                    Не уверен, что там будет достаточно места для чего либо: толщина у корпуса довольно маленькая.


  1. leahch
    02.12.2023 11:10
    +9

    А у меня раскладка переключается через CapsLock, кстати, там и светодиодик имеется. Прада у меня linux :) Чего всем и рекомендую.


    1. yarkov
      02.12.2023 11:10

      Вы не веган случайно?


      1. leahch
        02.12.2023 11:10

        Божечки упаси! Люблю отведать разных зверушек, особенно в виде стейков лакомых частей, и запить вискариком под приятную беседу о вечном.


    1. geher
      02.12.2023 11:10
      +1

      Раскладку по CapsLock можно и в Windows менять. Например, упомянутый Punto Switcher имеет и такую возможность, другие програмки есть для этого. Только все, что я перепробовал, работает недостаточно надежно. Иногда не срабатывает: вместо переключения раскладки включит верхний регистр, и не переключить обратно никак.

      А светодиодик на состояние CapsLock далеко не у всех есть, а если есть, то часто его плохо видно.


      1. haqreu
        02.12.2023 11:10

        Autohotkey пробовали? У меня ни разу не глючило переключение по капсу.


        1. MountainGoat
          02.12.2023 11:10

          А у меня бывало. После чего единственный способ вернуть как было - выключить скрипт.


      1. Breathe_the_pressure
        02.12.2023 11:10

        SimpleSwitcher


    1. Breathe_the_pressure
      02.12.2023 11:10

      В Виндоус использую SimpleSwitcher для совместимости с клавиатурой в Linux. Capslock переношу на F24 и ставлю на переключение раскладки, тогда нет глюков. Также он флаг добавляет, и можно набранное исправлять.


      1. perfect_genius
        02.12.2023 11:10

        Что такое F24 и зачем вам вообще Caps Lock?


        1. Grey83
          02.12.2023 11:10
          +4

          В инетах пишут, что комбинации Shift+F1 - Shift+F12 преобразовываются в F13 - F24, соответственно.


        1. Breathe_the_pressure
          02.12.2023 11:10

          Так как пользуюсь и Линуксом и Виндой, хочу чтобы переключение раскладки было на одной кнопке, тут и получается засада. Если ставить на Линуксе shift+ctrl, то так как у него клавиши регистрируются только на нажатие, все комбинации с shift+ctrl не работают, например в броузере shift+ctrl+p не работает. В итоге в Линуксе ставлю capslock.

          В Винде нет такой комбинации, поэтому пользуюсь той программой. А чтобы не реагировали некоторые программы (всё равно есть глюки) переношу родной Caps на F24.


          1. geher
            02.12.2023 11:10

            Единой комбинацией для всех систем можно выбрать Win+пробел, которое сейчас продвигают в винде. Но мне показалось как-то неудобно.


      1. DemVy Автор
        02.12.2023 11:10

        Не юзал эту программу. Может быть по-юзаю. Спасибо за информацию! Если появится потребность, думаю, легко смогу перенести свой код на C# на другую платформу. C# кросс-платформенный язык программирования.


    1. qark
      02.12.2023 11:10

      Уточню, что светодиодик можно включать/выключать независимо от клавиш переключения раскладки.


      1. DemVy Автор
        02.12.2023 11:10

        Верно. Моё устройство индикации раскладки не зависит от способов (клавиш) переключения, хоть мышкой переключай.


        1. qark
          02.12.2023 11:10

          Я про встроенные в клавиатуру.


    1. DemVy Автор
      02.12.2023 11:10

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


      1. vvzvlad
        02.12.2023 11:10
        +1

        Ну так проще было бы к светодиодику капса подпаять транзистор и другой сверхяркий лазерный светодиод, поярче, а не костылить второй usb-интерфейс.


        1. DemVy Автор
          02.12.2023 11:10

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


    1. 0x131315
      02.12.2023 11:10
      +2

      В linux к клавиатуре относятся более чем серьезно. На других ОС не встречал такого богатого набора настроек. Можно настраивать вид индикатора в трее, набор языков, хоткеи для перебора/переключения, лампочки на клавиатуре, область сохранения языка (окно/приложение/экран/система), и еще десятки параметров, которые кому-то наверняка нужны. Вот например только одна из вкладок настроек kde, и это только треть от всего списка настроек что тут есть:

      И это по сути просто обертка к текстовому конфигу: все тоже самое можно и вручную прописать в конфиги по документации из сети. Т.е. тут на уровне самой ОС такой подход


    1. Iwanowsky
      02.12.2023 11:10

      Я иногда на переключение раскладки ставлю на СкролЛок, но на ноутбуке этой клавиши у меня нет, а КапсЛоком я пользуюсь по назначению. На своем ноутбуке также частенько переназначаю прокрутку страниц вверх/вниз или Хоме и Энд на правые Алт и Контрол (т.к. ими обычно почти пользуюсь). Клавиши прописываю в системном реестре Виндовс при помощи любой из клавиатурных утилит (не использую горячих клавиш).


  1. grizzly_8
    02.12.2023 11:10

    У Punto Switcher можно выключить автопереключение и изменять по хоткею набираемое слово. Получается даже быстрее, чем если сначала переключать раскладку.


  1. Zara6502
    02.12.2023 11:10
    +1

    спасибо, ушло в закладки, а кодом не поделитесь? я как раз думал насчет аппаратной индикации, но для другого, и все думал как можно её к усб присобачить. Могу 500 руб заплатить за реализацию и схему железки :)


    1. DemVy Автор
      02.12.2023 11:10

      Поделюсь! От денег не отказываюсь. Пишите, куда отправить архив исходника.


  1. geher
    02.12.2023 11:10
    +1

    Есть же замечательная программа Punto Switcher!

    Среди прочего она замечательна тем, что часто наглухо валит некоторые версии MS офиса при исправлении раскладки.


    1. DemVy Автор
      02.12.2023 11:10

      Круто! Вот честно не помню какие конкретно подобные "суровые" причины заставили убрать эту прогу с компа. Вполне возможно, что эта. Давно это было. Да, кажись, правда.


  1. nebularia
    02.12.2023 11:10
    +5

    Ну есть же уже готовый ненужный совершенно индикатор Scroll Lock. В линуксах многих по дефолту индицирует раскладку, в виндовс 100% тоже можно что-то найти.


    1. mrlobaker
      02.12.2023 11:10

      И по этой же причине его уже почти не ставят. На ноутбуках и даже на моей основной клавиатуре индикатора scroll lock нет ¯\\_(ツ)_/¯


      1. AVX
        02.12.2023 11:10

        Есть нюансы использования скролллока на разном софте, типа либреофиса (как-то давно натыкался на длинное обсуждение разработчиков, связанное с каким-то багом, или часть считали это багом, другие "фичей", и связано с этой клавишей и соответстующим режимом).

        Однако, я с самого начала использования линукса (годы 2007-2008) использовал именно этот индикатор на клаве для отображения раскладки. Но не только - отображение флага на экране тоже включал, и это лучше чем разглядывать RU или EN там показывает - краем глаза уже заметно. А на ноутбуках проще - экран прямо рядом с клавой, и нет никакого смысла в индикаторе на клаве, ведь на 5-7 см выше уже видно индикацию на экране. На компе клава может быть заметно далеко от экрана, да и экран может быть довольно большой.


    1. DemVy Автор
      02.12.2023 11:10

      У меня три "родных" зелёных светодиода моей клавиатуры, в том числе и CAPS LOCK настолько тусклые, что слева я их уже не вижу. По моему, они на клавиатуре чисто формально стоят.


  1. aik
    02.12.2023 11:10

    А если просто выделить текст и сменить раскладку руками? Без автомата. Таких программ полно.


    1. Zara6502
      02.12.2023 11:10

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


      1. aik
        02.12.2023 11:10

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


  1. Moog_Prodigy
    02.12.2023 11:10

    А если в системе будет больше чем один ch340 ? И куча компортов. Тут станок, тут программатор, тут ESP, эта утилитка с ума не сойдет часом?


    1. DemVy Автор
      02.12.2023 11:10

      Как я уже написал в статье, "мой" COM-порт ищется по замыканию TX на RX. А именно: программа открывает очередной (по списку, взятому из зарегистрированных в системе COM-портов) COM-порт и шлёт ему байт ":" на скорости 115200 бод. И тут же, в течение 100мс ждёт от COM-порта ответ в виде того же байта. Далее, моя утилита работает с тем COM-портом, который нашла. И номер порта не меняется. Поиск происходит один раз при загрузке системы. Предполагается, что устройство индикации и программа встроены в систему до включения ПК. Если же устройство индикации "отвалилось" от разъёма USB, тогда, да, начнётся новый поиск. Не думаю, что какое-то внешнее устройство отреагирует на один байт тем же байтом. Потому что смысл коммуникации с условным станком заключается в передаче данных, и чаще всего передаётся пачка байт с проверками стартового байта и контрольной суммы передаваемых данных. Кроме того моя скорость передачи данных программой 115200 бод довольно таки высока, чтобы принимающий байт условный станок мог его определить как полезную посылку, ведь большинство устройств (и, тем более, удалённых от ПК устройств), для пущей надёжности линии RS232, имеют скорость ниже, чем 115200 бод. А в стандарте RS485 нужен стробирующий сигнал на разрешение передачи. У меня же при поиске COM-порта отправляется только байт, без стробирующего DTR или RTS. В общем, я считаю такой сценарий практически маловероятным. Но теоретически всё возможно, конечно. Схемку я целенаправленно упростил до максимума, для простоты повторения большинством пользователей. У многих нет станков дома и кучи действующих COM-портов. Но, при желании, всё возможно усложнить, конечно, поставив микроконтроллер в устройстве индикации раскладки.


      1. VelocidadAbsurda
        02.12.2023 11:10

        Справедливости ради, 115200 - как раз таки очень распространённая скорость, а вот какие-нибудь 1.5-2мбод (CH340 такое поддерживает) были бы действительно нетипичны (как и противоположная крайность - 50бод).


        1. DemVy Автор
          02.12.2023 11:10

          Спасибо Вам за ценное и справедливое замечание! Исправил в программе на частоту 921600 бод. Не более, потому что по даташиту на CP2102 увидел, что выше не поддерживает. У FT232R всё нормально. Ссылку на программу обновил.


      1. Alexeyslav
        02.12.2023 11:10

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


  1. udik_chudik
    02.12.2023 11:10

    Получается из клавиатуры теперь торчит 2 USB кабеля?)


    1. Grey83
      02.12.2023 11:10
      -1

      Возможно можно подпаять внутри клавы к шнурку параллельно самой клаве.


      1. DemVy Автор
        02.12.2023 11:10
        +2

        Нет, нельзя так делать. Это USB протокол.


        1. Grey83
          02.12.2023 11:10
          +2

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


          1. DemVy Автор
            02.12.2023 11:10

            Да. Именно так и можно смастерить, если по габаритам всё укладывается.


            1. Iv38
              02.12.2023 11:10
              +2

              С габаритами проблем не будет. Дешёвый USB 2.0 хаб обычно представляет собой одну микросхему, часто это FE1.1s. Размером она примерно как CH340. Обвязки там минимум: кварц на 12 МГц, несколько резисторов и конденсаторов. В простейшем случае можно купить дешёвый USB-хаб, выпаять разъёмы и обкусать плату до минимального размера. А порты припаять прямо к ногам.


        1. RichardMerlock
          02.12.2023 11:10

          Наверняка на каких нибудь клавиатурах можно перешить контроллер, чтобы внутри клавы что надо доразместить. К примеру, на самодельных.


          1. DemVy Автор
            02.12.2023 11:10
            +1

            Вряд ли. Везде контроллер клавиатуры - просто чёрная капля без возможности перепрошить. Всё делается максимально дёшево.


    1. DemVy Автор
      02.12.2023 11:10

      Проще говоря, да. Но можно засунуть внутрь клавиатуры USB-HUB. Благо, малогабаритных дешёвых хабов много в продаже. Или сделать отдельное устройство с кабелем или воткнуть его во внешний usb-hub и разместить рядом с клавиатурой. Я же прикрутил снизу клавиатуры самодельную платку. На платке usb-hub на микросхеме FE1.1, а экранчик подсказывает когда работать (30 минут), а когда отдыхать (10 минут), и так в цикле. И укоротил кабели клавиатуры и мышки. А плата соединяется с ПК кабелем с type-c.


  1. EskakDolar
    02.12.2023 11:10

    Давно мечтал о таком.

    Только лучше не одну лампочку, а 2 сверху, 2 снизу и по одной справа и слева


    1. DemVy Автор
      02.12.2023 11:10

      Да, можно и так. Только, чтобы наверняка "уложиться" по току, лучше на выходе микросхемы поставить полевые транзисторы, например, 2N7002 или KSP2222.

      Резистор на 56 ом лучше поставить с мощностью рассеивания 0,25 Вт.


      1. RichardMerlock
        02.12.2023 11:10
        +3

        В чем преимущество управления током нагрузки через её закорачивание ключом?


        1. sim2q
          02.12.2023 11:10

          может экономия инвертора из за определённой активности сигнала, 340 не раскуривал,но по идее всё должно гибко тюниться


        1. DemVy Автор
          02.12.2023 11:10

          Сигналы RTS и DTR инверсные. Активный уровень у них - ноль. То есть при единичке (в обычном состоянии) на выходе CH340 светодиоды гореть не должны.


  1. keekkenen
    02.12.2023 11:10

    тоже привык к punto switcher'у, но на корпоративном ноуте нельзя всякие экзешники ставить, поэтому написал плагин для Intellij IDEA, теперь хотя бы при написании кода не страдаю


    1. Iv38
      02.12.2023 11:10

      Что делает плагин?


      1. keekkenen
        02.12.2023 11:10

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

        1. конвертирует в альтернативную раскладку последнее введенное слово (текст, что слева от курсора)

        2. конвертирует в альтернативную раскладку выделенный фрагмент текста

        попутно, если конвертация случилась, то переключает раскладку клавиатуры..

        априори, предполагается, что есть только ru, en языки


  1. heavy
    02.12.2023 11:10
    +2

    При таком способе определения языка, будет работать не везде. Например, это не работает в меню пуск, терминале, приложениях из виндовс стор.

    Самое надёжное — определять язык через системный индикатор в систрее, он поддерживает iAccessible.

    Уже много лет пользуюсь единой раскладкой https://habr.com/ru/articles/301882/

    При таком подходе, если не смотрите на экран при наборе, язык можно определять по индикатору capslock.

    Меня много лет не устраивали индикаторы раскладки, поэтому написал свой, под виндовс.
    https://khsoft.ru/li/


  1. Neitr
    02.12.2023 11:10
    +1

    А не лучше ли сделать чтобы сами буквы клавиш светились русские когда рус, латинские когда eng. А то куча бесполезной подсветки порой наделают, а подсветить буквы ума не хватает ни у кого,


    1. leremin
      02.12.2023 11:10

      Вроде клавиатура от Артемия Лебедева так могла


      1. Iv38
        02.12.2023 11:10

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


    1. Iv38
      02.12.2023 11:10
      +1

      Довольно сложно. Надо на каждую клавишу ставить по два светодиода и кейкап ещё устраивать так, чтобы символы правильно засвечивались. Более простой вариант тут уже предлагался. Когда подсвечивается только одна раскладка. На рынке полно таких клавиатур, где русская раскладка нанесена просто поверх и не светится. У Razer например (позор вообще за такие-то деньги).


  1. a-tk
    02.12.2023 11:10
    +7

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

    (дед пошёл пить таблетки)


    1. DemVy Автор
      02.12.2023 11:10

      Светящаяся обводка по периметру клавиатуры - красивое решение!


      1. Grey83
        02.12.2023 11:10

        вне активного окна, если перенести на винду (сто лет DOS ни в каком виде не встречал и не вспомню как интерфейс выглядел, разве что фар и нортон вспоминаются)


      1. a-tk
        02.12.2023 11:10

        По периметру экрана/окна/поля ввода!


    1. keekkenen
      02.12.2023 11:10

      да, прикольная штука была


    1. Alexeyslav
      02.12.2023 11:10

      Только это был аппаратный изъян CGA/EGA адаптеров, внешнее поле не входило в диапазон доступных для отображения пикселей и управлялось аппаратно. На других адаптерах такой фишки уже нет и этот финт не прокатывал.


  1. SkywardFire
    02.12.2023 11:10

    я просто напомню общеизвестный, в общем-то, факт. В линуксе сигнализация о включенной русской раскладке светодиодом scroll lock является встроенной стандартной фишкой с 90-х годов.


  1. comandante_teresa
    02.12.2023 11:10
    +1

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

    Тк я пользуюсь только двумя раскладками, самым удобным стал вариант при котором переключения на раскладку делаются индивидуальными сочетаниями клавиш для кириллицы и латиницы. Надёжно, быстро, безошибочно.


  1. ilyakruchinin
    02.12.2023 11:10
    -1

    "Оторвал взгляд от клавы, посмотрел на экран…" (c)

    Дальше читать эту муть не стал.
    Автор - при наборе на клавиатуре смотреть надо ИСКЛЮЧИТЕЛЬНО на экран!