Как стать автором
Обновить

Комментарии 54

Круто, в свое время было бы полезно иметь такой инструментарий (давно пересел за mac). Если оформить такое чудо как удобную gui тулзу можно даже деньги на наших программерских братьях рубить.
Написать аналог, потому что имеющийся софт с нужными возможностями платный, а потом начать этот аналог продавать — это прям перебежка в стан врага :)
Я бы сделал free to use версию, первый месяц бесплатно а потом часть кнопок лочится или нужно платить 0.99 в месяц. А за то что приглашаеш в апу друзей — каждый день подарок, новая кнопка.
Это называется shareware.
Нестóит.

Да, в виндах без AutoHotkey вообще никак. Раскладку тоже меню по CapsLock, есть варианты более суровые, через WinAPI, но остановился на самом простом:


$Capslock::Send {alt down}{shift down}{shift up}{alt up}
+Capslock::Capslock
Теперь можно выбросить подобные костыли!
А есть ли возможность через файлы раскладок повлиять на сочетания переключения раскладок? Настроил в linux'е переключение на английский по LCtrl, на русский — по RCtrl, а в Win7/2008 страдаю. Punto Switcher ставить только ради нестандартного переключения раскладок не вижу смысла.
К сожалению, развесить переключение на два Ctrl нельзя, по крайней мере, используя изложенные средства. Даже сейчас такое «переключение раскладки» внутри одной раскладки является довольно хитрым хаком.

Возможно, в японской раскладке или системе ввода IME есть более продвинутые средства ввода, которые это позволяют.
Есть RusLat 95, работает на XP и Win7. На 2008 не проверял.
хмы. возможно теперь получится нарисовать полноценный аналог макосной раскладки DQ — дворак с qwerty хоткеями.
Я думаю, должно получиться, если записать в обычный ряд QWERTY-клавиши, а в ряд с включённым Caps Lock — Dvorak.
там немного сложнее, и проблема в том что хоткеи активируются по контролу — я сейчас использую подобную штуку за авторством одного американца, но там судя по всему есть какие-то подводные камни когда софт типа файрфокса лезет в обработку ввода своими кривыми лапами и в итоге некоторых хоткеев получается не существует вообще — Ctrl-C например
Есть ли возможность прикрепить к какой-нибудь кнопке свой scan code? На клавиатуре(meka g-unit) име.тся 12 дополнительных кнопок, но скан-кодов на них нет(
Можно воспользоваться программой get_scancodes, понажимать эти кнопки и посмотреть, какие скан-коды получаются.

Если скан-кодов вообще нет, значит, клавиатура ничего не шлёт по нажатию этих кнопок.
Скан-кодов нет, но в программе можно забиндить действие по нажатию. Придётся реверсить протокол(
Не подскажете программу, которая может слушать то, что посылается в клавиатуру?(USB)
А, то есть с клавиатурой идёт специальная программа для дополнительных кнопок? Ну тогда её и реверсить, используя WinAPIOverride, например. Про USB не подскажу.
Не подскажете программу, которая может слушать то, что посылается в клавиатуру?(USB)

Wireshark в том числе и с USB работает.


По поводу ревесить, может быть так, что скрипты пишутся в память клавиатуры, и по нажатию отдаётся запрограммированный поток сканкодов. Т.е. сама по себе кнопка не шлёт вообще ничего. У меня в Aivia Osmium именно так. Был G-Unit, но было это давно и разбирался с этой клавиатурой недолго, поэтому точнее не подскажу.

Полагаю, что логика работы этих клавиш определена на железном уровне в контроллере самой клавиатуры. Так бывает, например, с клавишами-модификаторами типа FN, у которых тоже нет скан-кода и система их не видит.
Мне было интересно расковырять формат.
В MSKLC делать раскладки, подобные моей — замучаешься, а ряда функций там вообще нет. Редактировать исходный текст гораздо удобнее нащёлкивания кнопок в GUI.
Может быть кому-то будет полезно: в Windows можно переназначать клавиши с помощью реестра.
Например, я себе повесил на ненужный Scroll Lock клавишу Mute, очень удобно.
Подробнее можно прочитать здесь:
http://www.howtogeek.com/howto/windows-vista/disable-caps-lock-key-in-windows-vista/
https://geektimes.ru/post/75290/
А теперь можно это сделать и раскладкой, подменив нужную клавишу в таблице scancode2vk или e0scancode2vk.
И без перезагрузки.
Мне кажется или есть ещё один недостаток? Word к примеру будет считать весь текст набранный в этой раскладке написанным на русском языке.

Соответственно орфография и грамматика будет соответствующая.
Word и прочие продукты Office язык определяют не по раскладке же.
Да и это опционально — по какому словарю делать проверку. По нажатию F7 появляется окно с нужным выпадающим списком.
Так же можно активировать автоопределение языка (от раскладки это тоже не зависит).
Пробовал переучить себя на Win+Space, но на некоторых компах стоит Win7 и из-за этого пришлось от этой идеи отказаться.

Для переключения по Caps Lock использую Punto Switcher, но бывает иногда (раз в 2 недели) такой баг, что включается режим больших букв и в такой момент всё можно поправить. Зайти в меню punto switcher, выключить переключение по Caps Lock, нажать Caps Lock и вернуть как было.

Хочется ваш способ попробовать, но боюсь, что иногда будет вылезать такой же баг с большими буквами и тогда придется делать выход из системы или еще что-то магическое
Полгода пользуюсь, такого бага не наблюдал. Windows 7 64-bit.
Попробовал на Windows 7 x64. Есть некоторые вопросы:
— В режиме EN, дополнительное переключение осуществляется по CAPS Lock, но как в таком случае, включить постоянный CAPS Lock в этой раскладке?
— В режиме EN нет отображения режима раскладки, это так и должно быть? Хотя, я понимаю, что, по сути, он ведь не меняется при переключении CAPS Lock-ом.
— Ну и самое главное, в FAR manager действия, назначенные по Alt+F7 (поиск файла, но на самом деле, там масса хоткеев, завязанных в частности на комбинациях с alt) например, теперь доступны исключительно только по Left-Alt комбинациям (это понятно, почему), хотя в США (НЕ международной) раскладке это можно было делать c любым ALT. Я так понял, что США раскладке не делается различий между ними (т.е. нажатие на любой ALT расценивается как LEFT ALT). Но я привык работать в ФАР с правым ALT и США-раскладкой: (
И в этом варианте данные модификации сразу падают в ценности.
Вопрос — что нужно поменять в asm-файлах? Ну или, если нельзя сделать «слияние» alt как в США-раскладке, то можно ли просто «поменять» левый и правый ALT, что для это нужно изменить в исходнике?
1. Функция Caps Lock в моей раскладке полностью заменяется — вместо больших букв русские.
2. Индикатором выступает лампочка, а ОС и программы думают, что раскладка никогда не меняется.
3. Если в раскладке присутствует ряд AltGr, то соотвественно, правый Alt им и становится. В обычных раскладках такого ряда нет.
Хорошая мысль! Только что поменял Alt'ы местами и в Far'е работает RAlt+F7. Просто замените VK_LMENU на VK_RMENU и наоборот. Можно оба сделать VK_LMENU.
Спасибо, у меня всё получилось.
Немного корявый install.bat — если инсталлировать несколько раскладок — то приходится править внутри SET id= и дополнительно константу 00do, которая является параметром реестра «Layout Id». Последний одинаковый параметр у нескольких раскладок не даёт их выбора из трея, видимо ctfmon просто теряется в дублях. Но это мелочи.
Ещё не совсем ясно назначение параметра реестра «Layout text» — в какой ситуации это будет отображаться (US+)?

Спасибо за замечание — поправил install.bat.

Про «Layout Text» не уверен, если где увидел — не запомнил, увы. Так что пусть будет на всякий случай просто потому, что у других раскладок такое есть.
Поправочка: если не нравится AltGr, хочется использовать правый Alt как прежде и для ввода дополнительных символов не лень нажимать Ctrl+Alt, то можно из раскладки убрать флаг KLLF_ALTGR, заменив на 0.

Это будет более чистым решением, чем менять Alt'ы местами.
Да, попробовал и этот вариант, спасибо.
Заметил ещё пару вещей:
— При совместной работе с русской (стандартной) раскладкой punto switcher не хочет делать авто-переключение, если русский текст набирался латинницей, т.е. буквально набираем текст «ghj» — ps переключает язык и текст превращается в «про».
Если у нас альтернативная и Русская раскладки — ничего не происходит. Вероятно, ps не признает текущую (USA-undead) раскладку за нерусскую и не переключается. Казалось бы, мелочь, у меня в ps и так автопереключение выключено, но включено принудительное переключение по Break, когда набираешь текст, видишь, что не то, жмешь Break — ситуация исправляется, удобно. Однако и это тоже не работает.
— Далее уже багофича:
— PhotoShop CS при наборе текста (при редактировании изображения) вводит только латинницу, при переключении вместо кириллицы вводятся знаки вопроса.
— PMView в диалогах сохранения изображений аналогичная ситуация, (в том же фотошопе, в диалогах сохранения/открытия, однако, нет такой проблемы)
— Тем не менее, в очень древнем Cool95 такой проблемы нет. Естественно, все перечисленные программы — 32-битные.
Я компилировал и инсталлировал два варианта dll — c WOW64 = 0 и WOW64 = 1, копировал их в system32 и sysWOW64.

— Ну и, чтобы два раза не вставать, вот что я решил по индикатору:
Перепробовал несколько программок, и остановился на программе KeyboardLEDs © KARPOLAN, в ней есть режим отображения состояния CAPS Lock (и не только) иконкой и/или OSD текстом.
Всё бы ничего, но OSD текст вещает исключительно то, что есть — именно «Caps Lock ON/OFF», в связи с чем проделаны небольшие изменения в exe, чтобы вместо выводился текст «RUS/LAT», не знаю, является ли это нарушением, но если кому то интересно, могут пользоваться совершенно свободно: https://drive.google.com/open?id=0B0jPU_spS-c3bExwcTZOOTRscU0
В архиве оригинальный пак с программой, в подпапке \kbdasm — изменённый exe и инфо по ручному патчу, пара картинок с демонстрацией.
Нет сюрприза в том, что Punto Switcher не поддерживает гибридную раскладку. Если нужно им пользоваться, пожалуй, лучше разделить раскладку на две и использовать его функцию переключения по Caps Lock. Или написать разработчикам, пусть добавят поддержку =)

В Photoshop CS3 (32-bit) на одном из компьютеров у меня кириллица вводится. Гибридная раскладка зарегистрирована как русская (0419), единственная в системе. Windows 7 64-bit. Раскладку достаточно поставить только в system32.

Попробовал PMView (32-bit), тоже не поймал баг.

Обычно знаки вопроса вместо кириллицы возникают тогда, когда раскладка поставлена в английской локали (0409). Но вот Фотошоп у меня всё равно текст нормально пишет.
Именно, пока тоже разбирался, но вы меня опередили. Вобщем, тоже нашёл ответ — если регистрировать модифицированную dll как русскую (0xxx0419) — то поведение становится адекватным, а раскладка появляется, естественно, в разделе Русских.
Хочу на основе стандартной раскладки сделать немного модифицированную — «не выходит каменный цветок».
В win8.1x64 дизасмил оригинальный файл kbdru.dll потом скомпилировал его обратно без всяких правок и прописал под другим именем в реестр, при нажатии «выбрать метод ввода» языковая панель закрывается с небольшим подвисанием компа.
Нужно было секции ".data" добавить флаг executable.
Только вот теперь firefox раскладки переключает по alt+tab, хотя в системе настроено по ctrl+tab.
* alt+shift ctrl+shift
О, этот момент я упустил, забыл поставить флаг executable. Исправил, спасибо!

Насчёт Firefox'а не уверен, что с ним делать, мне несколько раз приходилось его «уговаривать», так как он в раскладку лезет самостоятельно.

Есть мысль: Firefox у вас 32-битный на 64-битной Windows 8? Попробуйте сделать версию раскладки для WOW64 и поместить в C:\Windows\SysWOW64\
Если 32-битную версию закинуть в SysWOW64 винда её не видит, т.е. в списке выбора раскладок она есть (из реестра читается), но саму dll-ку не видит т.к. кнопка просмотра раскладки не активна и при добавлении этой раскладки используется всё равно стандартная. Теперь даже при удалении кастомной и установки стандартной firefox всё равно переключается по alt+shift.
разобрался с ff: он у меня под другим (ограниченным в правах) пользователем запускается, отсюда все проблемы, перенастроил под другой учёткой, теперь всё нормально.

Проблема с сочетаниями AltGr + буква в том, что куча приложений использует такие сочетания, например, тот же фотошоп. В результате всё ломается.

Можете привести пример? Было бы странно, если бы куча приложений ломалось из-за AltGr, ведь множество системных раскладок её использует.

В том же Фотошопе: если вводим текст, AltGr+W пишет нужный символ. Вне режима ввода это действует, как Ctrl+Alt+W (закрыть все окна). По-моему корректное поведение.

Не знаю, как вам, а мне не нравится, когда функция зависит от того, где находится курсор. И не все приложения аккурантно отличают, где находится фокус. Я уже не помню деталей. Помню только, что меня поведение раздражало достаточно, чтобы ограничиться в своих раскладках сочетаниями вроде AltGr+;, то есть без букв.

Хм… Я, вообще говоря, не против того, чтобы в режиме ввода и вне него горячие клавиши работали по разному, но AltGr+W и Ctrl+Alt+W — это больно стрёмная коллизия.
В системе AltGr — то же самое, что и Ctrl+Alt, так что это не коллизия, а просто синонимы.

Уточнил этот факт в статье.
Сколько лет я пытался настроить нормальное переключение по капсу…
Перепробовал кучу вариантов, у всех один косяк, были места где они не работали. Либо консольные приложения либо меню пуск, а тут наконец-то работающие везде решение!
Спасибо большое!!!

Пойду делать себе индикацию, не очень удобно по стейту капса смотреть.
ну наконец-то… конец страданиям
Ну и от меня 5 коп: индикатор текущей раскладки в трее: github.com/konstlvov/capstray/tree/flags-ru-us
В виде флагов стран, как привыкли на Punto Switcher, ну и на почти голом Win32 API для легковесности. Автор (Ron Wilson) написал оригинальный индикатор с помощью WM_TIMER, я переделал на клавиатурный хук (так правильнее). Экзешник в репозитории добавлен, а то ставить Windows SDK, это все настраивать, компилировать, это так себе занятие.
НЛО прилетело и опубликовало эту надпись здесь

После того как в Windows 11 сломали переключение языков по Ctrl+Shift (если быстро/одновременно нажимать - нестабильно работает, важен порядок, ппц, 20 лет нормально работало) - наконец дошли руки до этого.

Из дополнений - т.к. штатно и без костылей оставить 1 раскладку при 2 языках в системе похоже невозможно - установил 2 идентичных копии раскладки с разными именами и на Ru и на En.

я подменяю оригинальный KBDRU.dll, дополнительная комбинация клавиш для смены раскладки выключена, а на "неотключаемую" win+space назначено на другое

2 идентичных копии раскладки с разными именами и на Ru и на En.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации