Как удалить редко используемые языки из горячих клавиш переключения языков?

Как удалить редко используемые языки из горячих клавиш переключения языков?

Я печатаю на следующих 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 он может быть другим, но где-то похожим). Диалог выглядит так:Изменить последовательность клавиш

Связанный контент