1

Я печатаю на следующих 3 языках:

Язык А - 55% времени

Язык Б - 40% времени

Язык С - 5% времени

Обычное решение состоит в том, чтобы установить все три языка и использовать Ctrl/Alt-Shift, однако довольно неудобно переключать язык C каждый раз, когда я переключаюсь между A и B.

Есть ли какое-то решение, которое позволило бы мне предотвратить переход Windows на язык C, когда я нажимаю Ctrl/Alt-Shift? Затем я мог бы добавить отдельную горячую клавишу для переключения на язык C.

Я использую Windows 7 SP1.

Спасибо.

2 ответа2

1

У меня такая же ситуация и я установил разные горячие клавиши для каждого языка, например:

  • Ctrl+Shift+1 для языка A,
  • Ctrl+Shift+2 для языка B,
  • Ctrl+Shift+3 для языка C

Это позволяет переключаться на нужный язык всего одним нажатием клавиши. Это можно установить в Панели управления \ Все элементы панели управления \ Язык \ Расширенные настройки \ Изменить горячие клавиши языковой панели (это путь от Windows 10, в Windows 7 он может быть другим, но где-то похожим). Диалог выглядит так: Изменить последовательность клавиш

1

Вы можете создать скрипт Autoit для "пропуска" языка "C" при переключении языка клавиатуры.

После установки Autoit и Editor. Щелкните правой кнопкой мыши на рабочем столе-> New-> Autoit Script. Щелкните правой кнопкой мыши на созданном файле -> Изменить. Теперь вы должны увидеть окно ScITE и после строки "Добавьте свой код ниже здесь" добавить этот код:

#include <WinAPISys.au3>
ClipPut(_WinAPI_GetKeyboardLayout(ControlGetHandle("[ACTIVE]","","")))

Нажимайте SHIFT+ALT(или какие горячие клавиши, зарегистрированные для переключения языка клавиатуры), пока ваш текущий язык не станет "C"(если имя языка клавиатуры не отображается на панели задач, нажмите Win+R - >> CTFMON.EXE - >> Enter), затем в в окне ScITE нажмите Инструменты-> Перейти. Теперь в вашем буфере обмена языком "С" код. Вставьте (CTRL+V) и сохраните его где-нибудь.

Удалите предыдущий код и вставьте это:

#include <WindowsConstants.au3>
#include <WinAPISys.au3>
#include <String.au3>
#NoTrayIcon
$skiplang="0x04090409" ;skip this language when switch language
$list=_WinAPI_GetKeyboardLayoutList ( )

$fakeforwardlang=""
If IsArray($list) Then
    if $list[0]<3 then Exit; you potato
    For $i = 1 To $list[0]
        if $list[$i]=$skiplang Then;find next lang
            if $i=$list[0] then
                $fakeforwardlang=$list[1]
                ExitLoop
            EndIf
            $fakeforwardlang=$list[$i+1]
            ExitLoop
        EndIf
    Next
Else
    Exit
EndIf
$fakeforwardlang=StringMid($fakeforwardlang,1,6)
while 1
$handle=ControlGetHandle("[ACTIVE]","","")
if getcurkb($handle)=$skiplang then _WinAPI_SetKeyboardLayout($handle, $fakeforwardlang)
Sleep(100)
wend
Func getcurkb($handle)
    Return _WinAPI_GetKeyboardLayout($handle)
EndFunc

Для следующего шага в этом скрипте нужно заменить код сохраненного языка "C" на 0x04090409 (5 строк).

Затем в окне SciTE нажмите Инструменты-> Построить. Теперь вы получите исполняемый файл в той же директории, где был скрипт Autoit. Запустите этот исполняемый файл (.exe).

Нужно использовать диспетчер задач для уничтожения процесса, если хотите остановить скрипт.

Работает на Windows 7 с 3 языками клавиатуры и отключенным UAC.

Обновить:

Я облажался. _WinAPI_SetKeyboardLayout Вперед работать только иногда. Стандартная посылка очень глючная, когда нажата клавиша {вниз}. Текущее решение на основе внешней функции. Но одна проблема, связанная с этой функцией, заключается в том, что вам нужно отменить нажатие клавиши shift и alt для переключения на следующий язык клавиатуры. Нужно перепроверить код позже.

Update2:

Вернуться к _WinAPI_SetKeyboardLayout, но с использованием фальшивого форварда. Я не могу найти никаких проблем сейчас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .