Как я создал первую функцию
Все началось с того что я захотел программировать на C# (до создания этой программы у меня было почти что никаких знаний о C#), и была одна программа которая не работала так как я хотел (Punto Switcher) долго-долго я искал к ней альтернативы и ненадолго остановился на dotSwitcher нравилась она мне… Но через некоторое время я решил что ей не хватает функционала и решил посмотреть исходный код, кое-где кое-как я разобрался как все работает, но больше всего не понимал одну вещь — WinAPI, и начал я искать информацию по функциям используемых в dotSwitcher и понемногу я начинал запоминать и понимать смысл всего этого волшебства (так мне тогда казалось).
Писать в уже созданный dotSwitcher мне не хотелось т.к. там совсем другой стиль кодинга, да и к тому же я не понимал бы зачем та или иная функция или переменная, так что я решил создать все с нуля! Для начала я разобрался с HOOK'ами, потом с функцией PostMessage с помощью которой я смог менять раскладку, благодаря чему уже у меня появились идеи по поводу того как можно будет конвертировать набранный текст. я создал список клавиш в который попадали все глобально нажатые клавиши (благодаря клавиатурному HOOK'у) приделал очистку списка клавиш по кликам мыши (благодаря мышиному HOOK'у) и создал горячую клавишу по которой менялась раскладка, но оставался вопрос "Как сделать чтобы программа вводила эти клавиши?", тогда то я и узнал о функциях SendInput и keybd_event которые делали именно это. После я переделал функцию горячей клавиши на:
- Сменить раскладку.
- Послать BackSpace [количество пойманных клавиш] раз.
- Ввести [пойманные клавиши].
И она работала!!! Так как я и хотел.
К каждой функции нужен свой способ осуществления, здесь я описал как я создал первую функцию смены раскладки последнего набранного текста.
Касательно названия я назвал программу (на японском, т.к. он мне очень нравится) — ??(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...)
- Портативная, не требует установки.
- Сниппеты, автозамена маленьких слов на предложения.
- Отображения флагов стран в трее.
Помощь:
Если вам нравится программа, и/или Вы хотите меня поддержать (и если Вам не трудно):
- Star on Github
- Like on Alternative.to
- Расскажите друзьям. :)
Ссылки:
> Репозиторий на GitHub
> Релизы на GitHub
> Wiki на GitHub
> Обсудить на GitHub
> Скриншоты
Комментарии (111)
Shifty_Fox
09.02.2017 19:28+1Я давно использую вашу программу, все почти идеально. Не ожидал внезапно встретить авторскую статью на Хабре, вот вам просьба из аудитории:
Флаги стран в трее. Я бы использовал стандартный RU\EN индикатор, но он меняется с задержкой в несколько секунд, неудобно.
trapwalker
09.02.2017 19:35А по существу. Какие основные отличия от Punto Switcher'а?
Из вашего описания я делаю вывод, что часть его фич вы не реализовали.
Черный список, отключающий автопереключение для специфических слов есть?
Не столько претензия, сколько простой вопрос: Почему такая жесткая экономия места в интерфейсе? Местами вам приходится применять сокращения, когда можно написать полностью просто скомпоновав все попросторнее.
Если разнести настройки по вкладочкам, то к каждой галочке можно будет внятно и лаконично написать что она означает и при этом интерфейс не станет перегруженным. Там-то интерфейса того раз два и обчелся.
Не знаю, может у вас там развесистые и удобные хинты, но делать отдельную справку и сопоставлять эти два контекста для настройки приложения это как-то… кустарно. Я понимаю, что взгляд у вас замылен, вы знаете все нюансы этой переключалки и для вас все очевидно, но пользователям милее простая лаконичная прозрачность в программе, которой хотелось бы в идеале не замечать. Идеальный вариант — просто забыть о том, что она есть и пользоваться на автомате. В вашем случае придется вспоминать каждый раз. когда что-то идет не так.
При беглом осмотре вики и скриншотов я не нашел (или не заметил) настроек черного списка приложений, где нужно отключить автопереключение или ввести специфические правила.
У вас есть такая функция? Планируется, если нет?lam0x86
09.02.2017 19:42+3Мой внутренний параноик полагает, что Punto Switcher — это не просто переключатель клавиатуры. С чего бы Яндексу нужен был этот совершенно неприбыльный продукт? Зато кей-логгер из пунты получается отличный.
trapwalker
09.02.2017 19:57+1Ваш внутренний параноик молодец. Наверно он вам примерно в том же духе бухтит про яндекс-браузер, про гугл-хром, про андроид, про… Однако люди этим пользуются и не парятся. Может быть кто-то и не осознает до конца, но по-большому счету… почему нет? Ну будет яндекс более качественно подбирать для вас контекстную рекламу, ну получит какие-то данные для улучшения своего поиска… Я бы больше опасался за сторонний мелкий продукт, пусть даже опенсорсный, у которого слишком мелкое коммьюнити, чтобы вычесать оттуда большинство уязвимостей и делать это достаточно оперативно. Какая-нибудь лазеечка с не очень аккуратной работой с DNS или https в автообновлении, и этот продукт в умелых руках становится реально опасным шпионом. Я не хочу сказать, что с Punto такого случиться не может, но ресурсов у них, мне кажется, больше.
Очевидно, что это не единственный вектор атаки. Поломать могут цепочку на любом этапе, а в случае одного-двух мантейнеров получается бутылочное горлышко, в котором очень удобно вставить закладку. Большинство-то пользователей качает бинари и ставят то, что пришло с автообновлением.
Я не хочу ничего сказать в пользу того или иного продукта, но хочу обратить внимание параноиков, что не всё так однозначно. Если вы настолько параноик, что обходитесь собственными сборками хромиума после личного ревью каждого апдейта, то вы скорее всего и без переключателя раскладок себя чувствовать нормально будете. По крайней мере приучить себя к переключению сравнительно нетрудно.redmanmale
09.02.2017 22:47Намного проще доверять небольшому опенсорсному продукту, который я могу собрать сам, отключив все «обновлялки» или шпионские функции.
И да, очевидно, что и я.браузер, и гугл-хром и иже с ними шлют туеву хучу статистики на свои сервера.
И как раз простые приложения от таких гигантов вызвают много вопросов и оправданных опасений.trapwalker
09.02.2017 23:42+2Вот если действительно все сами собираете, то, конечно, никаких вопросов. Паранойя — это всегда ограничения. Мы жертвуем неким комфортом и/или временем, чтобы потешить своё тёплое уютное чувство паранойи. Но это становится самообманом и фарсом, когда паранойя включается иногда. Нельзя быть чуточку параноиком. «Чуточку-параноики» — это просто самообманщики.
Кстати, забавная сейчас наблюдается тенденция. Отсутствие социальной жизни и некоторой активности (неприемлемой для параноиков) последнее время записывает параноика в ряды «подозрительных личностей». Параноиков перестаёт защищать мощный механизм принципа неуловимого Джо, а после этого уже трудно наверняка утверждать кто более уязвим статистически: представители малочисленной группы странных людей или обычные люди без заморочек, коих легион.
Как большой эксперт по всему, к чему не имею никакого отношения, могу озвучить свою точку зрения относительно идеального параноика.
Идеальный параноик — это человек с «файрволом» в голове.
— На одной стороне «файрвола» простой стандартный обыватель, присутствующий в соц-сетях, пользующийся виндой, бесплатным антивирусом и единым паролем «1a3s5^7*» на всех своих обывательских эккаунтах.
— На другой темная личность, никак не связанная с первой, сидящая за шелухой тора и самописным паровозиком собственных VPN. Отдельный ноут, выглядящий поломанным, и система на двусмысленно зашифрованной флешке используется для непрерывного формирования запасных вложеных путей анонимизации. Такой человек виден в сети как множество несвязанных личностей-аватаров, выглядящих как давно созданные, неумело заполненные и редко используемые профили в разных сетях и сервисах на разных языках и с разными легендами.
Этому идеальному параноику так трудно живется, что сложно даже представть зачем он такой нужен, кроме как чтобы проворачивать какие-то темные высокооплачиваемые делишки… но раз уж эти делишки темные, то есть ои или нет их не понятно. Как и тех людей за внутренним файрволом.
apollo2k4
10.02.2017 10:38Очень хотел бы посмотреть как вы соберёте Chromium отключая все «шпионские штучки».
redmanmale
18.02.2017 20:57А я про хромиум ничего и не говорил. Я знаю, что во-первых, его сложно собирать (как и весь крупный софт), а во-вторых, там всё равно куча всего.
Для успокоения паранойи люди делают вот такие форки.
Опенсорсные .net приложения собираются легко и непринуждённо (если написаны нормально), с остальными приходится как минимум повозиться.
dom1n1k
10.02.2017 00:57Отличная логика — давайте променяем гипотетические уязвимости и мифическую слежку неизвестно кого (откуда этот некто вообще знает, что данная программа стоит у меня на машине?) на почти гарантированную корпоративную слежку (но это же не страшно, они хорошие).
trapwalker
10.02.2017 02:54Корпоративная слежка — это не слежка скорее, а сбор информации обо всех подряд. И вас конкретно, думаю, гугл как-то особенно не выделяет… наверно. Почему тогда вы не рассматриваете такой же вариант в случае с этим опенсорсным ПО, а сразу перешли к рассмотрению индивидуальной угрозы от некоего гипотетического «некто».
Это совершенно разные ероятности. «Корпорация против всех» и «некто против вас» — это не всё, есть еще «многие против всех, до кого удастся дотянуться». Здесь я подразумеваю неких злодеев, которые рыщут по интернету в поисках уязвимостей с целью выгоды. И эта угроза выглядит куда более реальной, чем подозрение гугла в том, что он хочет завладеть вашей кредиткой или ресурсами компа для рассылки вирусов или ещё чем-то, что может составить вам проблему, а ему (гуглу=) выгоду.
Проиллюстрирую натянутым среднепотолочным примером.
Некто написал скрипт, который ходит по репозиториям на гитхабе и ищет конкретный набор 0-day уязвимостей по коду. Скрипт выдал много-премого проектов, которые были всячески отфильтрованы, и составлен топ по популярности среди пользователей (а не программистов; то есть у них небольшое коммьюнити). Осталось как-то заполучить базу пользователей. Например взломать соц-инженерией одного из мантейнеров или как-то еще заполучить, скажем, логи багтрекера или системы автообновления… Да, это не аудитория гугла по объёму, но это реальные сотни и тысячи машин, которые можно заполучить под контроль. Гипотетически, конечно.dom1n1k
10.02.2017 04:01Критичная ошибка всех подобных рассуждений — олицетворение Гугла или Яндекса в виде такого цельного существа, которое действует логично и непротиворечиво. Гугл не будет делать то, гуглу не выгодно сё, гугл не охотится на кредитку…
Гугл — это многие-многие тысячи людей, среди которых могут оказаться такие, кто не прочь воспользоваться своим служебным положением. И я не знаю, кто именно из них имеет физический доступ к серверу, на котором будет лежать моя гипотетическая переписка. Понятно, что лично Брину я нафиг не упал. А вот какому-нибудь админо-стажеру Хозе или Абдуле — может быть, кто знает? И не надо мне рассказывать про права доступа и политику безопасности — это красивая теория, жизнь обычно менее предсказуема.
Про соц «взлом» мейнтейнера — это какие-то дикие фантазии. Если софтина не имеет бэкдоров, то откуда вообще у него такие списки? Он что, знает IP-адреса своих пользователей? Рутовые доступы имеет? Бред. КПД такого бизнеса будет даже не знаю в каком знаке после запятой, для злых хакеров есть куча более продуктивных полян.
Картина примерно такая: я боюсь, что мне на голову упадет метеорит (вероятность 1e-6%), поэтому пойду и добровольно сяду в тюрьму.trapwalker
10.02.2017 09:37Гугл — это многие-многие тысячи людей
Ок. Тут я с вами согласен.
Но так однозначно сравнивать вероятности взлома с того или иного вектора… Попахивает когнитивными искажениями. Майнтейнеру не нужны списки пользователей, он билдит бинарь, который пользователи тянут сами и запускают у себя.доверяя полностью. Опять же, вы, наверно билдите сами после ревью исходников, но большинство берет бинарные сборки, особенно для винды.
Да и в целом вы меня не так поняли. Я не пытаюсь убедить, что гугл безопаснее Mahou. Я пытаюсь сказать, что не всё так просто и однозначно, что любая паранойя должна быть консистентной и перестраховываться от метеорита катаясь на автомобиле по городу — это не логично.
BladeMight
10.02.2017 01:46у которого слишком мелкое коммьюнити
1 чел. но
чтобы вычесать оттуда большинство уязвимостей
как видите здесь вычесывает :)
https в автообновлении
Чем опасно подключение к GitHub'у, которое только загружает данные о новой версии?
и этот продукт в умелых руках становится реально опасным шпионом
Ну дык Open-Source же, что хочешь то и делай(сам).
обходитесь собственными сборками хромиума после личного ревью каждого апдейта
Угадал — это Я, а еще свои сборки Nightly и Servo :)
trapwalker
10.02.2017 03:01Я чуть выше ответил примером, который и вам хочу адресовать. Да, возможно, вы исключение и никогда не пользуетесь готовыми бинарными сборками… но таких мало и интереса вы особого не представляете, поскольку сидите, наверно, на линуксе или маке и в целом более осторожны, чтобы попсться. И я не утверждал, что офт от яндекса в этом плане гарантированно более безопасный. Я лишь хотел сказать, что не всё так просто и не все так однозначно, если быть достаточно параноидальным в суждениях.
am-amotion-city
14.02.2017 13:55В ветке про софт для windows этот тред особенно доставляет, конечно :)
Винду эти умники тоже ручками пересобирают, после каждого апдейта, интересно?
sumanai
14.02.2017 17:37Пересобирать сейчас можно только ядро XP, да и то без апдейтов и даже последних сервис паков. Печаль ((
Ну или использовать ReactOS, где есть простор для компиляции ))
Al_Azif
12.02.2017 04:18Вы наверное не застали, или просто не помните, как Punto Switcher сам обновился у всех, у кого были запрещены обновления.
Ещё раз — в топку программы с такими сюрпризами.trapwalker
14.02.2017 22:46Действительно не застал. Или, впрочем, не заметил. Давайте опустим вопрос о том, нужно ли включать автообновление софта, особенно если вы этому софту уже доверились, установив его.
Конечно обновляться, если обновления отключены в настройках — это тот еще зашквар. Однако я не имел чести послушать другую сторону. Я не хочу гадать ошибкой это было, или закрытием критической уязвимости, которая показалась авторам важнее галочки настроек, или интерфейс настроек был плохо локализован и галочка подразумевала меньшую степень категоричности…
То, что одна прога обновилась без спросу никак не меняет вероятности, ее вредоносного использования авторами или посторонними лицами. По крайней мере корреляция надумана и не доказана. Суть — предрассудки. Закрытое ПО под виндой по определению может в один прекрасный день проснуться и сделать всё что угодно.sumanai
14.02.2017 23:42Закрытое ПО под виндой по определению может в один прекрасный день проснуться и сделать всё что угодно.
Как и закрытое ПО под любую другую ОС.
Al_Azif
19.02.2017 12:29Вопрос не в этом.
Это программа, которая по сути является кейлоггером.
И _любое_ нестандартное поведение заставляет задуматься — «а что там ЕЩЁ заложено интересного»?
Понимаете, когда как-нибудь вечерком у вас снимут пару штукарей с кредитки — вы наконец задумаетесь о том что по сути ваши данные ничем кроме честного слова производителей(весьма ограниченного лицензией) — не защищены.
А цели производителей почти всегда не совпадают с целями потребителей.
Aingis
10.02.2017 13:05Да всё банально: для того же для чего и другие 100500 мелким программ, которые многие ставят. Распространять свой поиск/Яндекс.Браузер. Не будет Яндекса, будет Мэйл.ру или Гугл.
Shifty_Fox
09.02.2017 19:51+1Вот я к примеру тот самый пользователь который ушел с Punto Switcher на Mahou. Тут ведь дело не в том что Mahou умеет делать, а в том, чего она не делает:
Не зависает раз в месяц-два, полностью сбрасывая настройки, из за чего нужно выставлять их заного.
Не вылетает на большой нагрузке на ввод, переключение окон и т.п. (Раз в 2-3 дня мой Punto Switcher стабильно вылетал)
При установке не просит поставить браузер и еще сопутствующего софта.
При обновлении не просит поставить браузер и еще софта.
Ну я прямой функционал который все таки Mahou делает, работает стабильно и без проблем, за что автору спасибо.
AndreyDmitriev
09.02.2017 20:56+1Я пробовал Punto несколько раз — там предполагается наличие английской en-us раскладки, которая у меня не устновлена. А когда сочетание русская/немецкая, то там были какие-то проблемы. Я, впрочем, последние версии не смотрел, может всё стало хорошо.
BladeMight
10.02.2017 01:48В Mahou — неважно какие у Вас раскладки, просто выберите нужные в настройках.
dixi
10.02.2017 01:38Такое ощущение, что Яндекс давно забросил PuntoSwitcher и разве что периодически ухудшает его: )
BladeMight
10.02.2017 01:40автопереключение
В Mahou вообще авто-переключения нет! Зачем черный список для функции которой не существует?
Почему такая жесткая экономия места в интерфейсе
Ну это первый мой интерфейс на C#, и заточен он был именно под ширину английских строк, поэтому русские сокращены кое-где.
Если разнести настройки по вкладочкам
Надо будет почитать и поглядеть как это выглядит...
BladeMight
10.02.2017 02:08Какие основные отличия от Punto Switcher'а?
- Размер (Папка PuntoSwitcher — 6.51 МБ, Папка Mahou — 362 КБ).
- Портативность(не требует установки).
- Возможность переключать по любым раскладкам(даже по собственно созданным).
- Ничего никуда не отправляет
- Не просит установить дополнительный софт, расширения и т.д.
- Open-Source.
- Другие функции(авто-обновление, игнорирование символов при конвертации, и т.д.).
BladeMight
10.02.2017 02:16+1А еще в Punto Switcher мне надоедала надпись — "Отмена невозможна", в Mahou такой — нет и конвертирует везде!
trapwalker
10.02.2017 03:15+21. Вы серьёзно? Кого сейчас волнует размер? Да к тому же эти жалкие 10 метров. Нет, ок, похоже вас-таки волнует, но, черт подери, почему?! Тем более 10 метров — это действительно мелчи. Я надеюсь на первое место этот пункт попал не по важности для вас.
2. Зачем портативность программе, которая вешает системные хуки и висит в трее? Я бы назвал это скорее минусом, поскольку это просто очередной уход от стандартизации. Пользователю надо как-то по-особенному работать с вашей прогой. Это в век удобных аппсторов, репозиториев и прочих достижений прогресса.
3-6. Ок
7. Автообновление у пантосвитчера, вроде есть, или вы о чем? Игнорирование там тоже есть, иначе как бы они делали автоконвертацию?Shifty_Fox
10.02.2017 04:52OpenServer тоже прописывается в автозагрузку, если в его настройках поставить галочку, и при этом portable.
Инсталлятор для программы написать — дело десятое, а наличие вообще нативной портабельности это плюс.
3aicheg
10.02.2017 05:38+1Возможно, я один такой извращенец, но я люблю, когда программа маленькая, не требует установки и хранит все свои настройки рядом с собой — тогда её можно положить в Дропбокс и использовать одинаково и на компьютере дома, и на втором компьютере дома, и на третьем компьютере дома, и на работе ещё, и никакой маеты с удобными аппсторами, синхронизацией настроек между компьютерами, и переустанавливать не надо, даже если винду переустановил. И маленький размер важен даже не потому, что места в дропбоксе жалко, а потому, что вот надо, допустим, прямо щас выключить компьютер и уйти — а оно только что автообновилось, ага, теперь синхронизируется. На жалких 10 метрах дропбокс может иной раз запросто протупить минуты две-три.
trapwalker
10.02.2017 10:08Вот даже не знаю с чего начать… Всё прекрасно в это комментарии. Я понимаю, почему описанный вами сценарий непрофильного использования дропбокса может быть удобнее. Но это же не от жизни хорошей, а от изначальных проблем с реализацией всей этой кухни.
Почему опасно держать бинари на дропбоксе, думаю, вам объяснять не надо. Но своим лайфхаком вы, простите, наколхозили распределенную файловую систему и держите на ней часть софта. очевидно, что это не полностью и не единообразно решает ваши проблемы.
В правильном, кстати, направлении в этом плане идет андроид. Почему в винде никак не перейдут к нормальной дистрибуции ПО я не знаю. В убунте давно есть волшебный и великолепный apt, и он прекрасен. Абсолютно всё, что нужно для жизни ставться одинаковым образом, удаляется одинаковым образом, хранит настройки одинаковым образом… Экономить размер программы, чтобы они влезали на дропбокс, чтобы решить часть проблем деплоя и синхронизации окружения между разными компами… Это всё половинчатые кустарные решения от сохи. Это как лайфхаки «как сделать люстру из бутылки и миски».
Ок. Выбора у нас нет, порой. И я тоже храню какие-то портабельные программы на дропбоксе. Но это не потому, что это идеальный вариант и лучше не придумать, а потому что выбора нет и никто не сделал лучше, а у меня на всё рук не хватит.
И к автору той проги логичная претензия: нужно делать так, чтобы не требовалось уметь пользоваться вашей прогой. Помещение ее в аппстор, например — это хороший кейс.rg_software
10.02.2017 10:51Какая-то странная претензия: от «автор делает удобно для хранения в дропбоксе» к «в винде не сделали нормальную дистрибуцию ПО».
Ну так автор же не виноват, что в винде не сделали нормальную дистрибуцию ПО! Вот именно поэтому и спасибо автору от нас за счастливую работу софтины из дропбокса. Когда все поголовно программы будут скачиваться обновляться из аппстора, тогда и будем предъявлять претензии, а пока да, вот так.
3aicheg
10.02.2017 11:29Вот даже не знаю, с чего начать… Т. е., вы предлагаете автору вместе с его мелкой утилиткой для хрен пойми чего заодно втащить целую экосистему дистрибуции софта, которую до сих пор как-то никто не осилил? Если он откажется от портабельности и сделает обязательное сетупыкзэ — это как-то поспособствует?
trapwalker
10.02.2017 14:10Я не предлагал ни от чего отказываться. Система дистрибьюции уже есть. Есть майкрософтовский стор. Я не пробовал, может на него трудно попасть?
Правильно сделанный инсталлятор — это тоже довольно удобно. Для автообновления нужно всего лишь скачать свежую версию инсталлятора и запустить на «тихую» установку.
Не хватает только облачного хранения настроек.
Кстати, а почему не вошло в практику хранить настройки приложения на специально выделенном почтовом ящике? Это ж готовое бесплатное облачко для хранения конфигурации и небольшого количества данных.ivvi
10.02.2017 15:23У меня на рабочем ноуте нет прав админа и установки софта. Портабельный переключатель раскладки — как раз то, что доктор прописал в этом случае.
sumanai
10.02.2017 16:31Я не пробовал, может на него трудно попасть?
1) Он есть только в десятке
2) Требует аккаунта в МС.
BladeMight
10.02.2017 05:441. Когда можно сделать почти то же самое при меньшем размере — не так уж и плохо.
2. А вы видели сколько ключей в регистре вешает PS? А Mahou все настройки хранит в Mahou.ini, а сниппеты(автозамена) в snippets.txt в папке из которой запущен.
Игнорирование там тоже есть, иначе как бы они делали автоконвертацию?
7. Я говорил об этой функции.
Al_Azif
19.02.2017 12:37Меня волнует. В своё время специально искал замену Punto, и нашёл её, но тут уже похоже тормоза WinAPI — раскладка переключается не моментально а с тормозами и почему-то иногда с «как-бы зажатым шифтом».
Например очень сильно нужно запоминание layout per window, потому что переключаться тудасуда между MSVS и телеграмом в котором идёт общение на русском — просто тупо задрало.
Во время рендера или процессинга юнити, когда комп стоит раком — переключение занимает до 3-х секунд. Это нонсенс.
Почему софт не может запомнить флаг — в какой он сейчас раскладке, в 2017-м году-то?sumanai
19.02.2017 14:12А разве по умолчанию ОС раскладку для окон не запоминает? По моему, только в Win10 решили сломать запоминание, но это исправляется настройкой.
budda
09.02.2017 21:00+1Жалко, что только 2 раскладки поддерживает
BladeMight
10.02.2017 01:33Могу добавить в будущем еще.
budda
10.02.2017 09:29+1да, хорошо бы было, для граждан пост ссср пространства актуально, так как нужен русский+ национальный + английский
rg_software
10.02.2017 10:53У меня несколько раскладок на компьютере, две из которых (рус/англ) использую чаще всего.
В Windows поставил переключение по кругу на Alt+Shift (ну, то есть ничего не менял) плюс в Punto / Mahou переключение рус/англ по Caps lock. То есть почти всегда пользуюсь Caps lock, а если нужна редкая раскладка, то уже включается стандартный Windows механизм.ivvi
10.02.2017 15:26Личное имхо: ставить рус/англ на одну клавишу — не очень хорошая идея, так как нет способа по состоянию клавиши определить какая раскладка активна в данный момент. Или вы смотрите по тому, горит светодиод или нет?
Имхо, разнесение на разные Ctrl (например) лучше в этом плане.
3aicheg
10.02.2017 19:24А ВМЕСТО КАПСЛОКА ШИФТ ДЕРЖИТЕ?
rg_software
10.02.2017 22:31+1ДА, КСТАТИ, НЕ ТАК ЧТО БЫ СОВСЕМ НЕУДОБНО. Мизинец на шифте, несколько букв пропадает, правда :)
Kalobok
09.02.2017 21:04приделал очистку списка клавиш по кликам мыши
Я правильно понимаю, что если фокус изменился при помощи TAB, то список не очистится?
format1981
09.02.2017 21:58+2Я сейчас punto switcher использую только для того, чтобы переключать раскладку по одной клавише. Настроил русский на правый Ctrl, а EN на правый Shift. В вашей программе есть такая возможность?
redmanmale
09.02.2017 22:49+1Весьма любопытная замена пунтосвитчеру, который пришлось выпилить после появления к нему вопросов. Спасибо!
dartraiden
09.02.2017 23:43+1А каких именно вопросов, если не секрет?
Лично у меня к пунто вопроса два:
— разработчики отказались чинить баг «при перезапуске проводника иконка пунты появляется, даже если в настройках указано её скрывать» (оказалось проще убрать эту настройку совсем, чем исправлять)
— в последней версии мало того, что адово тормозит окно настроек, так невозможно играть в 3D-игры режима «в окне» — ощущение, что у мыши DPI вырастает в разы, малейшее движение даёт поворот камеры чуть ли не на 360 градусов.trapwalker
10.02.2017 03:18А почему вы не занесете свои игры ему в черный писок, чтобы он не работал при них?
dartraiden
10.02.2017 03:41+1Потому что он мне нужен и в играх (в тех, где я активно общаюсь во внутриигровом чате). Проще оказалось откатиться на старую версию и забыть про обновления.
Пожалуй, единственное неоспоримое достоинство пунты перед аналогами — скромные требования (потребляет 3 мегабайта оперативной памяти)BladeMight
10.02.2017 05:49(потребляет 3 мегабайта оперативной памяти)
Если так хотите Я могу сделать чтобы Mahou потреблял ~1МБ ОЗУ когда скрыто главное окно.
rg_software
10.02.2017 10:55Мелочь, но меня расстроило, когда они сделали значок в трее неубираемым.
При этом крайне раздражает, что функцию просто по-тихому выпилили, и в changelog'е об этом ни слова.
Cryvage
09.02.2017 23:14Пару минут в программе и уже полезли баги.
Пишу «asdfпрол» выделяю, нажимаю scroll — преобразуется в «фывапрол», хотя по идее должно инвертироваться — «фываghjk».
Набираю несколько букв «z», выделяю, переключаю раскладку на русскую, нажимаю scroll — остаётся одна буква «z». Если вместо латинской буквы набирать русскую и сделать всё по той же схеме, то остаются, иногда две буквы а иногда три. Зависимость пока не выявил.
Если совместить и попытаться конвертировать что-то вроде «йййqqq», то баги суммируются и получается «ййййй» — приводит всё к одному языку и одну букву съедает.
Если написать слово и переключить раскладку, то с помощью pause его уже конвертировать не получится, даже если переключить раскладку обратно. При этом shift+pause работает, хоть и не с первого раза.
Ещё, когда конвертируешь выделенный текст, буфер обмена очищается. Не знаю, баг ли это, или фича, но лично мне это очень мешает.
З.Ы. не знаю почему пропадают одинаковые буквы, но первый баг явно связан с тем, что при конвертации выделенного текста программа ориентируется на текущую раскладку, и пытается текст, написанный в текущей раскладке преобразовать к противоположной. Имхо, при конвертации именно выделенного текста раскладка вообще должна игнорироваться, а всегда должно быть преобразование каждого выделенного символа к символу противоположной раскладки. И, мне кажется, саму раскладку клавиатуры, при этом не нужно переключать. Хотя лучше это сделать опциональным, и вынести в настройки.Cryvage
09.02.2017 23:34Выяснилось, что если снять галочку с CS-Switch то конвертация выделенного начинает работать правильно. И одинаковые буквы в этом режиме не пропадают. В таком виде уже вполне можно пользоваться. Ещё бы очистку буфера как-то отключить.
BladeMight
10.02.2017 01:23Очистка буфера восстанавливает пока что только текст. Доступно с версии v1.1.1.0.
dartraiden
09.02.2017 23:37Пишу «asdfпрол» выделяю, нажимаю scroll — преобразуется в «фывапрол», хотя по идее должно инвертироваться — «фываghjk».
Это, увы, частый недосмотр у авторов подобных программ. Точно такой же баг в SimpleSwitcher (утилита аналогичного назначения). Поэтому, до сих пор сижу на пунто.BladeMight
10.02.2017 01:19В Mahou есть такая функция — КВ-Ключ+
dartraiden
10.02.2017 14:56О, тогда, пожалуй, дам Mahou «второй шанс». Пулл-реквесты, кстати, принимаете? С орфографией в исходниках, локализациях и readme тихий ужас.
BladeMight
10.02.2017 01:25Имхо, при конвертации именно выделенного текста раскладка вообще должна игнорироваться, а всегда должно быть преобразование каждого выделенного символа к символу противоположной раскладки.
Да но символы есть в обоих раскладках, именно для них и создан ориентир по текущей раскладке. Подробнее
ClearAirTurbulence
09.02.2017 23:26Подсказка текущей раскладки возле курсора мыши + настройки внешнего вида подсказки.
Подсказка текущей раскладки возле текстового курсора(каретки) + настройки внешнего вида подсказки для каждой раскладки.
Эээ… скачал последнюю версию, где упомянутый функционал? Поднимите мне веки…
Gradarius
10.02.2017 01:26Еще не юзал, но судя по описанию это на порядок лучше чем Punto Switcher. Обязательно порекомендую, после личного испытания.
melchermax
10.02.2017 01:26А версия под Линукс будет?
Jogger
10.02.2017 05:51+1Писать на дотнете программу, которая всё равно сводится к винапи… Я единственный, кому это кажется довольно странным занятием?
простите, ошибся веткой. это должен был быть отдельностоящий комментарий…pfzim
13.02.2017 13:27Тоже хотел про это написать. Тянуть за собой сотни мегабайт фреймворка, чтобы использовать WinAPI.
А так отличная программа. Была раньше похожая, FF12 называлась. Очень нравилась.
Пользовался функцией замены буфера обмена.BladeMight
13.02.2017 13:27Ну это все потому что я хотел:
Все началось с того что я захотел программировать на C#
Поэтому и фреймворк потянул, а так я и в С могу тоже самое написать.
sens_boston
10.02.2017 09:45Идея, я считаю, просто замечательная, и давно назревшая! Сам было подумывал об этом, но как-то руки не доходили. Спасибо!
Опробовал, сразу появилось несколько замечаний (позже открою issues на github-е):
- не работает в консоли (Punto работает)
- не отрабатывает переключение при написании имен некоторых русских веб-сайтов (в строке адреса браузера), видимо, нужно подправить алгоритм, и учитывать, где идет ввод
- UI настроек, конечно, не очень — почему бы не скопировать Punto, но, естественно, в своем дизайне?
- вообще, было бы чудесно перекрыть один к одному всю функциональность Punto (за исключением шпионских функций ;) )
- не хватает tray иконки с флагами
Ambyte
10.02.2017 09:47Хочу попиарить также свою разработку — программу EveryLang
Переключает раскладку в автоматическом и в ручном режиме, сама формирует правила автопереключения.
Работает с любыми установленными в системе раскладками, гибко настраивается и стабильно работает.
Также имеет функцию переводчика, проверки орфографии.
В платной версии есть автозамена текста, менеджер буфера обмена, с возможностью копировать и вставлять текст с помощью только кнопок мыши, дневник ввода текста, индикаторы раскладки на указателе мыши и в позиции текстового курсора, функция smartclick — удобное управление выделенным текстом с помощью только мыши.
induction
10.02.2017 10:04Каждый программист должен написать в своей жизни самую крутую убийцу notepad.exe (с)
Хорошо хоть не на deplhirg_software
10.02.2017 10:58Да вот смейтесь сколько угодно, а я в своё время не нашёл утилиты, которая бы банально по Caps lock переключалась между двумя раскладками из списка, больше ничего мне не нужно. Вот только Punto switcher. До этого был ещё Arum switcher, но, к сожалению, в Win64 не работает.
Aingis
10.02.2017 13:30…утилиты, которая бы банально по Caps lock переключалась между двумя раскладками из списка…
ReCaps же.
rg_software
10.02.2017 13:41Спасибо, если бы ещё ссылка на программу работала :)
Впрочем, там тоже минус — висит в трее, нельзя убрать, если правильно понял. Но про это пожелание не упоминал, виноват.
Hormiga
10.02.2017 11:35Это чем хорошо?
Просто интересно, чем вам так не понравился Delphi, чтобы его заменять на более громоздкий .NET?induction
10.02.2017 12:13Мне оба нравятся, есть еще Visual Basic. Просто «маленький размер, скопировал в dropbox и пользуешься откуда угодно» и «для ее работы нужен .Net 4.0 и выше» немного слух режет.
Hormiga
10.02.2017 12:24+1Я согласен, мне тоже идеологически не нравятся .Net приложения и (отвлеченно) необходимость ставить юзерам по 4 фреймворка, т.к. обратной совместимостью никто не озаботился.
Но если бы программа была написана, например, на Delphi 7, она, учитывая все же не очень богатый функционал, влезла бы в 700 Кб и честно не требовала бы никаких зависимостей.induction
10.02.2017 12:30+1В 700 это уже с ухищрениями. На обычном VCL такое бы весило 2 ~Мб
Я к тому что если уж дергать именно WinAPI, то из Сей или Сей с плюсами.KonstantinSoloviov
10.02.2017 12:50Как вариант wxWidgets — довольно легонький фреймворк над WinAPI притом кроссплатформенный
Nikobraz
10.02.2017 22:12У программ написанных на Delphi 7 есть маленький недостаток, он требует права на запись в C:\ProgramFiles\Borland\Delphi 7
Nikobraz
10.02.2017 22:09С 3 раскладками нормально работает? А то, в Punto Switcher нужно Break нажимать 3 раза. Бесит. Была бы возможность в какую раскладку переключать безусловно, или разные сочетания клавиш для перевода в разную раскладку.
BladeMight
13.02.2017 13:30Да Mahou может переключать только по выбранным в настройках или по циклу(как Windows) раскладкам.
Muxlevator
12.02.2017 09:41А вот мой «убийца notepad». Умеет переключать раскладку только по хоткею, переключать раскладку по одной клавише (я пользуюсь правый/левый ctrl), показывать текущую раскладку в мышином курсоре, показывать текущую раскладку цветом рамки окна, показывать текущую раскладку led'ом scroll-lock'а. На чистом c++ без зависимостей.
andropol
13.02.2017 13:33У меня пунто не работает с оффисными приложениями на вин10.
Тут чуть лучше, но при попытке сконвертировать выделенный текст в 2016м ворде вылетает…sens_boston
13.02.2017 21:39У меня все работает именно в таком сочетании: Windows 10, Office 2016, Punto (специально вот только что проверил).
impwx
Пара советов, если позволите:
1. На окне с настройками всё слиплось, а ссылка на Github занимает самое видное место. Попробуйте разнести их на несколько табов — должно стать гораздо приятнее на вид.
2. Историю версий проще воспринимать, если они упорядочены по убыванию даты.
3. Вместо этой наркомании наверняка помог бы десериализатор (XML или JSON).
4. Очень странный способ локализации — советую почитать про ресурсы и сборки-сателлиты, будет удобнее.
5. Логика в Code Behind — это моветон :)
В общем, удачи в развитии проекта!
Thecentury
И ещё велосипедиум в логировании вместо NLog или log4net :)
BladeMight
Мне предлагали, но Я решил сам попробовать реализовать.
BladeMight
1. Я уже подумывал над созданием новыго интерфейса.
2. Думаю будет удобнее.
3. Раньше был XML, но у он не у всех работал, поэтому Я придумал новый способ сохранения/загрузки конфигурации с использованием WinAPI.
4. Полезно будет узнать новое.
5. :)
Спасибо.
Deosis
3. Можно попробовать добавить словари со значениями по умолчанию, разделить по секциям или по способу валидации. Вся портянка свернется в код инициализации и несколько циклов.
impwx
По поводу пункта 3 — если бы такой баг действительно был во встроенном XML-сериализаторе, его бы давно заметили и исправили. Нужно посмотреть на то, как вы им пользовались — могло побиться при рефакторинге файла настроек между версиями.
В качестве альтернативы попробуйте хотя бы Newtonsoft JSON.