Я печатаю на следующих 3 языках:
Язык А - 55% времени
Язык B - 40% времени
Язык C - 5% времени
Обычным решением было бы установить все три языка и использовать Ctrl/Alt-Shift, однако довольно раздражает необходимость переключаться на язык C каждый раз, когда я переключаюсь между A и B.
Есть ли какое-то решение, которое позволило бы мне запретить Windows переключаться на язык C при нажатии Ctrl/Alt-Shift? Тогда я мог бы добавить отдельную горячую клавишу для переключения на язык C.
Я использую Windows 7 SP1.
Спасибо.
решение1
Вы можете создатьАвтоитскрипт для «пропуска» языка «С» при переключении языка клавиатуры.
После установкиАвтоитиредактор. Щелкните правой кнопкой мыши на рабочем столе->Создать->Скрипт Autoit. Щелкните правой кнопкой мыши на этом созданном файле->Изменить. Теперь вы должны увидеть окно ScITE и после строки "Добавьте свой код ниже здесь" добавьте этот код:
#include <WinAPISys.au3>
ClipPut(_WinAPI_GetKeyboardLayout(ControlGetHandle("[ACTIVE]","","")))
Нажмите SHIFT+ALT (или другие горячие клавиши, зарегистрированные для переключения языка клавиатуры), пока ваш текущий язык не станет "C" (если название языка клавиатуры не отображается на панели задач, нажмите Win+R ->> CTFMON.EXE ->> Enter), затем в окне ScITE нажмите Tools->Go. Теперь в вашем буфере обмена код языка "C". Вставьте (CTRL+V) и сохраните его где-нибудь.
Удалите предыдущий код и вставьте этот:
#include <WindowsConstants.au3> #include <WinAPISys.au3> #include <Строка.au3> #NoTrayIcon $skiplang="0x04090409" ;пропустить этот язык при переключении языка $list=_WinAPI_GetKeyboardLayoutList ( ) $fakeforwardlang="" Если IsArray($list) Тогда если $list[0]<3 то выход; ты картошка Для $i = 1 Для $list[0] если $list[$i]=$skiplang Тогда;найти следующий язык если $i=$list[0] тогда $fakeforwardlang=$list[1] ExitLoop EndIf $fakeforwardlang=$list[$i+1] ExitLoop EndIf Следующий Еще Выход EndIf $fakeforwardlang=StringMid($fakeforwardlang,1,6) пока 1 $handle=ControlGetHandle("[АКТИВЕН]","","") если getcurkb($handle)=$skiplang тогда _WinAPI_SetKeyboardLayout($handle, $fakeforwardlang) Сон(100) венд Функция getcurkb($handle) Возврат _WinAPI_GetKeyboardLayout($handle) EndFunc
Для следующего шага необходимо заменить сохраненный код языка "C" на0x04090409в этом скрипте (5 строк).
Затем в окне SciTE нажмите Tools->Build. Теперь вы получите исполняемый файл в том же каталоге, где был скрипт Autoit. Запустите этот исполняемый файл (.exe).
Если вы хотите остановить скрипт, необходимо использовать диспетчер задач для завершения процесса.
Работает на Windows 7 с тремя языками клавиатуры и отключенным UAC.
Обновлять:
Я облажался. _WinAPI_SetKeyboardLayout Forward работает только иногда. Стандартная отправка очень глючная при нажатии клавиши {down}. Текущее решение основано на внешней функции. Но есть одна проблема с этой функцией: нужно отпустить shift и alt для переключения на следующий язык клавиатуры. Стоит перепроверить код позже.
Обновление2:
Вернуться к _WinAPI_SetKeyboardLayout, но использовать фальшивый форвард. Сейчас я не могу найти никаких проблем.
решение2
У меня такая же ситуация, и я установил разные горячие клавиши для каждого языка, например:
- Ctrl+ Shift+ 1для языка А,
- Ctrl+ Shift+ 2для языка B,
- Ctrl+ Shift+ 3для языка C
Это позволяет переключаться на нужный язык всего одним нажатием клавиши. Это можно настроить в Панель управления\Все элементы панели управления\Язык\Дополнительные параметры\Изменить горячие клавиши языковой панели (это путь из Windows 10, в Windows 7 он может быть другим, но где-то похожим). Диалог выглядит так:Изменить последовательность клавиш