Ультра-легкий переключатель раскладки клавиатуры

    От многой мудрости много скорби, и умножающий знание умножает печаль: чем глубже вникаешь в особенности мира IT, особенно той его части, которая про защиту информации, тем крепче паранойя. И это совсем не означает, что за тобой не следят. В очередном приступе тревоги за сохранность нажимаемых кнопок я удалил Punto Switcher. Однако без переключения раскладки после уже набранного слова, к которому я так привык, стало очень тоскливо. Никаких вменяемых альтернатив я так и не нашел, поэтому пришлось написать небольшую обертку над парой функций win api.

    Возможно, результат нескольких дней тыканья веточкой в user32.dll понадобится еще нескольким людям, в виде самой программки, либо в качестве примера отправки сообщений окнам из .Net, так что вот: аналог punto switcher, без свистелок, перделок и яндекс бара.

    К сожалению, в скайпе так и не работает. Буду благодарен, если кто-то опытный укажет мне на ошибки в коде.

    UPD.: Важное, судя по комментариям, уточнение: исправление последнего набранного слова происходит только по нажатию Pause/Break. Автопереключатели — зло.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 112

      +10
      Хотел бы услышать мнение сообщества: не является ли использование С# в данном случае стрельбой из пушки по воробьям? Во времена WinXP тянуть за собой жирный дотнет для использования пары функций WinAPI было моветоном. Как дела обстоят сейчас?
        +14
        Сейчас .NET Framework есть в современных системах в том или ином виде всегда. Времена Windows XP таки прошли.
          +4
          Да, по воробьям. Я не умею в чистый винапи.
            +6
            Да в том то и дело, что с одной стороны для приложения используется целая виртуальная машина, и куча кода вдобавок. Но с другой — уже даже для Seven такой подход нормален, дотнет сразу есть в наличии и запущен… Нужно ли тогда писать низкоуровневые приложения на WinAPI на Си, если и на C# сойдёт?..
              +3
              Нужно писать на том, что оправдано.
              Вообще-то мы уже 6 лет пишем на яве для мобилок!!!
              Что уж говорить про шарп на винде.

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

              P.S.
              Хотя я до самого конца буду максимум на сишечке писать. :(
                +1
                У дотнета нет виртуальной машины
                  0
                  Да? Странно. Wikipedia утверждает обратное:
                  Затем код либо исполняется виртуальной машиной Common Language Runtime (CLR), либо транслируется утилитой NGen.exe. Использование виртуальной машины предпочтительно.
                    +1
                    Ну это не та же «virtual machine» что и в JVM.
                    В дотнете байткод переводится в машинный, потом работает машинный.
                    Если этот JIT-компилятор желаете называть виртуальной машиной — пускай так, спорить не буду.
                      +1
                      Ну это не та же «virtual machine» что и в JVM.
                      И в чём же, я извиняюсь, отличие?

                      В дотнете байткод переводится в машинный, потом работает машинный.
                      В Java2 (появившейся за три года до выхода самой первой версии .NETа) всё происходит точно так же.

                      .NET 1.0 — это в чистом виде «Java2 от Microsoft с блэкджеком и шлюхами», не больше, не меньше. В последующих версиях они чуток разошлись, но основа осталась той же.
            +1
            Слегка неправильно понял, что делает dotSwitch, думал, это аналог haali.su/winutils/lswitch.c

            lswitch 20 => просто переключение по caps lock
              0
              Судя по всему, lswitch будет работать еще чуть в меньшем количестве приложений (в смысле вот это)
              +1
              А готового exe-файла нет? Не все же будут ставить Visual Studio, чтобы получить его.
                +15
                Есть, но я ведь мог туда свой кейлоггер вшить ;)
                  +1
                  Спасибо! Насчет кейлогера — не забудем, не простим ))
                    +6
                    А могли бы даже и не Вы…
                      0
                      Даешь хэш суммы! )
                        0
                        Так и в компилятор могли вшить такую штуку, которая при сборке вашего переключателя вшивает туда кейлоггер.
                          +1
                          Согласен, и в сам процессор тоже можно напихать всего. Но с гораздо меньшей вероятностью.
                            +3
                            В сам процессор уже напихано :)
                        +1
                        А собрать мсбилдом из консольки не позволяют убеждения?
                          0
                          Скорее опыт и знания, а не убеждения. Не все современные разработчики на C# знают, что msbuild это отдельная утилита и что сборка студией и msbuild'ом из консоли это вообще разные вещи.
                            –1
                            Вообще не такие уж и разные.
                            За исключением нескольких проектов, студия для сборки не нужна, но возможно не все разработчики это знают.
                              0
                              Все-таки вещи это разные.

                              msbuild — это отдельная утилита, позволяющая собирать проекты msbuild из конмадной строки. Причем *.sln не является проектом msbuild, а предварительно преобразуется в файл-проект msbuild с последовательным запуском билдов каждого из проектов решения.

                              А студия собирает решение с помощью devenv. И ее тоже можно юзать из консоли. Вот дока по вызову из комнадной строки.
                                +1
                                Так было раньше. И даже это не совсем так — студия все равно загружала в себя движок мсбилда и прогоняла все через его пайплайн, за исключением пары проектов (которые уже морально устарели имхо). Т.е. тогда было 2 хоста для движка — студия и msbuild.exe. Это приводило к тому, что окружение проектов отличалось — студия подсовывала кучу переменных окружения.

                                Но сейчас это не так — студия, по крайней мере современные ее версии, собирает проекты при помощи честного msbuild.exe, причем можно увидеть отдельные параллельные процессы msbuild.exe запущенные студией с определенными параметрами.

                                Да, солюшен это не мсбилд скрипт, но его преобразование происходит в msbuild.exe, а не в devenv.exe

                                В итоге — всё собирается одним и тем же движком, просто вызывается(лся) этот движок из разных врапперов — msbuild.exe и devenv.exe. Теперь один враппер вызывает другой, вместо того чтобы хостить Core engine в себе. Это и есть принципиальная разница?

                                PS: Господа минусующие, зачем портите дискуссию?
                                  –1
                                  Да, тут я не уточнил какие версии имею в виду. В последних версиях они действительно сделали все честно.

                                  Я последний раз глубоко копался в этом процессе еще 10-й студии. Даже приходилось дебажить скрипты msbuild. То еще развлечение должен я вам сказать.
                          +1
                          Для компиляции кода не обязательно VS ставить.
                          0
                          Я когда-то делал то же, но на winapi. Правда для полноценной работы и в консольных прогах типа Far нужен dll агент был. Не знаю как с .Net сейчас, упростилось наверное. В общем, это был просто флаг с изменяемой прозрачностью, перемещаемый по экрану. Сначала это была просто программа, но потом я переделал её под плагин для Far, так как в консоли прога не работала.

                          Потом punto switcher стал делать всё то же, но со свистелками и перделками. Я перешёл на него, но перделки все отключаю.

                          Если кому надо, могу поискать исходники, может сделаете то же, но без .net.
                            0
                            Посмотрел код, я ошибся. У меня был просто плавающий индикатор текущей раскладки в виде флага. Для печати не хватало удобного индикатора перед глазами, чтоб туда сюда не переключаться.
                            +2
                            Мне тоже не нравится современный Punto — даже если элементарно посмтреть насколько вырос размер exe-шника, то закрадываются подозрения, что там содержится не только прямой функционал. А может и нет — но паранойя не спит.
                            Поставил старую версию ещё дояндексовой эпохи — к сожалению, в Win7 она работает наполовину (не действует в Far, Sublime и еще где-то).
                              0
                              Только что проверил, мой работает и в фаре, и в саблайме.
                              0
                              А у меня в скайпе заработал.
                                +6
                                Да, в некоторых скайпах почему-то работает
                                  0
                                  Наугад.
                                  Быть может это как-то связано с «Дополнительными текстовыми службами»?..
                                +1
                                Эх, еще бы кто сделал аналог PuntoSwitcher для MacOs — он там настолько тормозит, что не продержался у меня и 15 минут.
                                  +1
                                  У коллеги на маке отлично работает. Я прямо завидую ему как у него все четко работает с ним.
                                    +1
                                    Может он медленно набирает? ;(
                                      0
                                      Да вроде со скоростью среднестатистического программиста-маковода :)
                                      0
                                      Тоже самое, оставил только переключение раскладки предыдущего слова, отключил звуки, подсказки и всё такое.
                                        +1
                                        В осиксе гораздо больше раздражает необучаемый автоматический спелчекер
                                        +1
                                          0
                                          эм, и как он автоматически меняет раскладку?
                                          Кстати, он по capslock раскладку меняет, здорово, но и капс оставляет...
                                          Он оказывается не меняет ее, а просто показывает :(
                                            0
                                            Капс не оставляет, перезагрузитесь или перелогиньтесь, а автоматически раскладку не меняет
                                            +1
                                            Уже второй год этой приблудой пользуюсь, отлично работает.
                                            0
                                            Полтора года назад перелез с винды на убунту и макос. До этого все время сидел на винде. Адекватно Punto Switcher работал только на Mac OS — очень удобно переключение только по Alt, и выделенного текста и просто переключение (да еще и повсеместно), тогда как в винде два шорта, как минимум. Хуже работы xneur для убунты я не испытывал.
                                              0
                                              Вы пользовались автопереключением раскладки в нём, и он тормозил при этом? Или при переключении раскладки у выделенного текста тормоза были? Просто интересно знать, при каком использовании он может ощутимо тормозить.
                                                0
                                                Именно авто-исправление раскладки (когда уже введенный текст переводится в нужную расладку).
                                                0
                                                Странно, может я какой-то не тот Puntoswitcher ставил.
                                                Сейчас поставил который от Yandex — работает отлично.
                                                Всем пардон.
                                                +3
                                                А я вот этой улиткой давно пользуюсь и очень доволен Recaps А поначалу тоже думал что-то свое писать, Punto бесит. ))
                                                  0
                                                  Эх, если бы он ещё индикатор имел…
                                                    0
                                                    Угу, просто переключаешь по хоткею, и раскладка текста меняется. Лайфхак: так можно конвертировать раскладку даже полученного текста, скопировав его в поле ввода.
                                                    0
                                                    Касательно паранойи… может я чего-то не понимаю, но какой смысл жизни у кейлоггера без доступа к интернету? Если поставить антивирь который выдает интернет программам исключительно по нотариально заверенным юзером талонам, то кейлоггер делает свою работу напрасно, даже если он есть. или все равно будут какие-то лазейки?
                                                    • UFO just landed and posted this here
                                                        0
                                                        Именно поэтому оружие и инструменты снабжают предохранителями. Я бы не хотел пользоваться прессом или гильотиной без защитного ограждения. Конечно, есть определенная вероятность, что ко мне на смену забежит Терминатор, чтобы по-быстрому расправить суставы на столе гидравлического пресса. Но куда вероятнее, что именно от моей руки останется невосстановимая лепешка. :)
                                                        Пунто, нинзя и т.п. хороши еще и тем, что позволяют выключить автоматику и просто выбрать удобную пользователю систему переключения. Например, мне очень редко приходится (но приходится) печатать по-казахски. Поэтому у меня английская и русская раскладки настроены на отдельные клавиши, а циклическое переключение всех трех языков лежит на стандартных.
                                                        Так что вполне можно пользоваться самыми разными инструментами, если хорошо их знать.
                                                        • UFO just landed and posted this here
                                                          +1
                                                          Так про автоматику никто и не говорит. Я тоже против автопереключения. Но зачем контролировать раскладку клавиатуры, если можно нажать «перенабрать» после написанного слова? Чтобы была привычка перед набором текста все время смотреть в трей? Контр-аргумент: дополнительное время и переключение внимания.
                                                          • UFO just landed and posted this here
                                                              0
                                                              А если scrolllock'а нет? например на моей клавиатуре его нет. И часто вы оказываетесь на чужой машине?
                                                              0
                                                              Зачем куда-то смотреть, если можно просто выбрать? У меня латиница висит на CapsLock, русский — на ShiftCapsLock, потому мне не нужно никуда смотреть и что-либо переключать пост-фактум, я просто перед набором слова нажимаю CapsLock или ShiftCapsLock и набираю слово, вот и всё. И меня совершенно не волнует какая была раскладка до того.
                                                              • UFO just landed and posted this here
                                                              0
                                                              «Машина никогда не поймёт, что ты хотел написать»
                                                              Громкое заявление. Напомнило про 640кб.
                                                              • UFO just landed and posted this here
                                                                +2
                                                                Полностью поддерживаю. Никогда не понимал надобности в этом софте. Тем более если есть хоть какой-то навык набора вслепую
                                                                • UFO just landed and posted this here
                                                                  • UFO just landed and posted this here
                                                                    +1
                                                                    Linux-way, однако. Если сказал системе sudo shoot the leg, значит надо стрелять без лишних вопросов.
                                                                    0
                                                                    Вы все еще о пунтосвитчере… Его дело продолжила КейбоардНинзя, на смену которой еще лет пять назад пришел просто KeySwitcher.
                                                                    Последний пока свистоперделками не грешит… :) Правда, все три не всегда успевают переключать языки на автомате, поэтому все работали в свое время в ручном режиме. :)
                                                                      +2
                                                                      Не нашел исходников.
                                                                    • UFO just landed and posted this here
                                                                        +1
                                                                        Не помогает. Вот набрал я слепым методом один-два слога (мышечная память — очень быстрая штука), и даже пробел нажал. Теперь надо бекспейсить, жать хоткей и перенабирать. Ну или развить привычку смотреть на трей перед набором. Но мне легче было свитчер накодить.
                                                                        • UFO just landed and posted this here
                                                                            +1
                                                                            Но ведь даже без ухода в себя, время обработки сигнала от глаз «набрано не в той раскладке» — заведомо больше, чем время набора трех-четырех букв. Особенно это проявляется в адресной строке браузера, где комментарии пишутся в русской раскладке, а урл — в английской.
                                                                            • UFO just landed and posted this here
                                                                                0
                                                                                Пишу слогами (не 10-пальцевым методом), но вслепую, лет шесть как минимум, так что ставлю на разницу в скорости восприятия визуальной информации.
                                                                              • UFO just landed and posted this here
                                                                                  +1
                                                                                  У меня, например, переключение раскладки на Ctrl+Shift, а ещё я люблю передвигаться по тексту и выделять с помощью Ctrl+Shift+стрелки. И частенько Ctrl+Shift срабатывает не как навигация, а как переключение раскладки. Это к слову о случайном переключении раскладки. Если о контроле — то зачем я освоил слепой набор, чтобы при этом ещё и в экран пялиться неотрывно? =) Я при этом часто отвлекаюсь по сторонам или вообще «вникуда», продумывая текст, который набираю. Или, например, набираю текст в строке поиска, а сам при этом смотрю на страницу следя за тем, где что выделится
                                                                                    0
                                                                                    У меня, например, переключение раскладки на Ctrl+Shift, а ещё я люблю передвигаться по тексту и выделять с помощью Ctrl+Shift+стрелки.
                                                                                    А это уже называется ССЗБ. Зачем вы себе выбрали переключение раскладок, которое можно нажать случайно, да ещё и не идемпотентное. Повесьте себе английскую раскладку на одну комбинацию, русскую — на другую (у меня — CapsLock и ShiftCapsLock соответственно) и не парьтесь.
                                                                                      0
                                                                                      Зачем вы себе выбрали переключение раскладок, которое можно нажать случайно
                                                                                      Потому что единственная штатная альтернатива в Windows — Shift+Alt, при которой вообще при каждом нажатии может сработать «Левый Alt = переход в главное меню окна». Ну, или остаться без тильды и буквы Ё.
                                                                                        0
                                                                                        Я с Windows уже лет пять как не общаюсь, но я не верю, что там больше не осталось программ, которые могут настроить всё «как надо».

                                                                                        То есть я понимаю — почему можно захотеть выбрать CTRL + SHIFT на системах, на которые вы не можете никакого софта ставить (действительно это почти что самое меньшее из всех зол), но тогда и «ультралёгкий переключатель клавиатуры» (требующий ресурсов примерно как приличный офисный пакет лет 15-20 назад, да) вы не поставите. А если уже что-то ставить, то почему не сделать себе удобно?
                                                                                          0
                                                                                          Что вы хотели этим сказать? =) Я просто объяснил, откуда под Windows проблемы с переключением раскладки. Они раздражают, но не настолько, чтобы ставить какую-то дополнительную утилиту на все компьютеры, за которыми мне приходится работать. Да ещё и страдать потом от этой привычки, когда буду работать за чужим (а у меня это случается регулярно).
                                                                                            0
                                                                                            Судя по вашему же описанию вы решаете проблему «да ещё и страдать потом от этой привычки, когда буду работать за чужим» путём перевода её в проблему «да ещё и страдать всегда», что как-то недалеко ушло от «выколю себе глаз, пусть у моей тёщи будет зять кривой».

                                                                                            Если вы работаете на чужих компьютерах, то да, приходится мириться и с Ctrl-Shift и с Alt-Shift. Но как же нужно себя не любить, чтобы на своём собственном компьютере всё не отстроить?

                                                                                            У меня есть знакомый, который под себя даже специальную раскладку сделал! Я до этого не предлагаю доходить, но зачем же терпеть проблемы, когда можно этого не делать?
                                                                                +3
                                                                                Последнее набранное слово? Ctrl+Backspace? В ворде, фаре, даже здесь в редакторе. :) В командной строке не работает… :)
                                                                                  0
                                                                                  Не всегда работает — многие поля вставляют при этом какой-то юникодный символ. Но есть Ctrl+Shift+стрелка_влево — выделяет последнее слово, если дальше набирать текст, то он как раз его затрёт.
                                                                                  • UFO just landed and posted this here
                                                                                      0
                                                                                      В текстовых редакторах зажатый Ctrl предполагает работу с целым словом. Стрелки — перемещение, Ctrl+Backspace — стереть слово, Ctrl+Shift+(left|right) — выделить слово. Вопрос только в том что редактор считает словом
                                                                                      • UFO just landed and posted this here
                                                                                          0
                                                                                          В Блокноте, например, просто вставится символ «»
                                                                                          0
                                                                                          Я бы не сказал, что со словом. контрол-вверх и контрол-вниз перемещают на один абзац
                                                                                            0
                                                                                            Тогда группой до ближайшего разделителя более высокого порядка.=) По горизонтали разделители — это пробелы, точки и т.д., по вертикали — края абзацев. Для Home и End — края файла.
                                                                                    0
                                                                                    А я как за автомобилем, когда заводятся на нейтралке, сначала по win+space переключаю раскладки и боковым зрением выбираю нужную.
                                                                                  –5
                                                                                  sudo dpkg-reconfigure keyboard-configuration

                                                                                  Без дотнета и прочих штук.
                                                                                  • UFO just landed and posted this here
                                                                                      +1
                                                                                      Никак. У меня выставлены две кнопки — русская раскладка и английская раскладка. Каждая из них делает заданную раскладку, а не гоняет её туда-сюда. По этому количество слов «не в той раскладке» стремится к несущественному (в пределах опечаток). Я обычно нажимаю нужную кнопку перед набором текста на нужном мне языке.
                                                                                        +1
                                                                                        Мне кажется, привычка убеждаться в правильной раскладке заранее (кнопкой, или взглядом), лишняя. Но на вкус и цвет.
                                                                                          +1
                                                                                          При тех словах, которые я обычно печатаю, догадаться о раскладке не всегда возможно. Так что проще просто перед печатью говорить, на каком языке ввод, чем потом исправлять «перекодирование» command mode у vim'а.
                                                                                      +1
                                                                                      Не ожидал увидеть вас здесь…
                                                                                        0
                                                                                        Здесь — это в блоге «open source»? Ну, бывает.
                                                                                      +1
                                                                                      У меня уже давно плавающий индикатор в виде флага по центру экрана (панель задач сверху и всегда скрыта). Он нужен для того, чтобы знать текущую раскладку в окне. Сам я владею слепой печатью и одна из проблем как раз: знать какая раскладка в окне, куда ты переключился.

                                                                                      Смотреть в трей — зло, смотреть на клаву — зло в квадрате, печатать указательными пальцами — каменный век.

                                                                                      Если ты чувствуешь клаву и знаешь текущую раскладку, то не наберёшь слово неправильно.

                                                                                      Punto Switcher у меня что-то стал криво работать и показывает раскладку не правильно.
                                                                                        0
                                                                                        Спасибо. Пожелание — добавить переключение выделенного текста по Shift+Pause/Break, это единственное, что мешает выключить Punto и начать проверять в ежедневной работе вашу программу.
                                                                                          +1
                                                                                          Я тут когда-то вот такое написал: habrahabr.ru/post/229833/
                                                                                          Shift + Pause/Break есть. Но просто Pause/Break нету.
                                                                                            0
                                                                                            Это будет, обязательно.
                                                                                              0
                                                                                              Пока еще нету или я не нашел нужную настройку?
                                                                                            0
                                                                                            Еще вариант arumswitcher.com
                                                                                              0
                                                                                              Было бы здорово если бы:
                                                                                              1. Можно было самому назначать горячую клавишу. На моем ноутбуке нет клавиши Pause/Break.
                                                                                              2. Иконка скрывалась бы и в трее.
                                                                                                0
                                                                                                Принято
                                                                                                0
                                                                                                А еще есть вариант — Comfort Keys. Кроме переключателя раскладки содержит менеджер горячих клавиш, менеджер буфера обмена, менеджер текстовых шаблонов ввода(автозамена), автоподсказка слов(типа Т9), экранную клавиатуру, несколько вариантов индикации текущей раскладки. Все ненужные возможности можно отключить. Купил, заменил ею несколько других программ, менеджером хоткеев назначил переключение раскладок так, как удобно мне. Работой доволен.
                                                                                                  +1
                                                                                                  Вставлю свои 5 копеек. Написал примерно тоже самое когда punto switcher не работал в пуске windows 8. Тоже хотел топик написать, да пока готовился они уже поправили. bitbucket.org/ErtyHackward/punto-test
                                                                                                    0
                                                                                                    С очень давних времен пользую Snoop. Опечатка by Dr.Golomin v2.711
                                                                                                    Без перделок и свистелок, работает по выделенному тексту и горячей клавише. Очень маленькая и легкая.
                                                                                                      0
                                                                                                      Можно ссылочку? Что-то найти не получается…
                                                                                                        0
                                                                                                          0
                                                                                                          Привте. Я, по ходу, подымаю некропост, но.

                                                                                                          Заценил переключатель и он мне весьма понравился простотой и отсутствием лишнего.

                                                                                                          Но, блин, не могу найти чего-то, что могло мне заменить пунто в таком плане:
                                                                                                          У меня стоит три раскладки — английская, русская и украинская. Какую божественную штуку умеет делать пунто?
                                                                                                          Там можно отдельно назначить кнопку для цикличного переключения и отдельно для английской раскладки. В итоге, я вешаю на левый контрол английскую, а на правый — остальные раскладки. И для того, чтобы врубить правильную, не нужно помнить, какая раскладка текущая.
                                                                                                          Рефлекторно жмёшь левый контрол — у тебя английская, а затем либо один раз правый, либо два, в зависимости, что тебе нужно.

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

                                                                                                          зы. Промазал с ответом, коммент для автора поста.
                                                                                                            0
                                                                                                            Сорян, даже не представляю, каким образом промахнулся.
                                                                                                        0
                                                                                                        А вот мой вариант под Linux
                                                                                                        — bash и совсем немного питона

                                                                                                        Only users with full accounts can post comments. Log in, please.