Вы можете создать скрипт 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, но с использованием фальшивого форварда. Я не могу найти никаких проблем сейчас.