Você pode criar o script Autoit para "ignorar" o idioma "C" quando mudar o idioma do teclado.
Após instalar Autoit e Editor . Clique com o botão direito do mouse na área de trabalho > New- > Autoit Script. Clique com o botão direito nesse arquivo criado - > Edit. Agora você deve ver a janela Scite e depois da linha "Adicione seu código abaixo aqui" adicione este código:
#include <WinAPISys.au3>
ClipPut(_WinAPI_GetKeyboardLayout(ControlGetHandle("[ACTIVE]","","")))
Pressione SHIFT + ALT (ou quais hotkeys registradas para alternar o idioma do teclado) até que seu idioma atual seja "C" (se o nome do teclado não aparecer na barra de tarefas, pressione Win + R - > > CTFMON.EXE - & gt ; > Enter) e, na janela ScITE, pressione Ferramentas- > Ir. Agora na sua área de transferência Código de linguagem "C". Cole (CTRL + V) e salve em algum lugar.
Remova o código anterior e cole isto:
#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
Para a próxima etapa, é necessário substituir o código "C" do idioma salvo por 0x04090409 neste script (5 linhas).
Em seguida, na janela do SciTE, pressione Ferramentas- > Construir. Agora você obterá executável no mesmo diretório onde estava o script Autoit. Execute este executável (.exe).
É necessário usar o gerenciador de tarefas para o processo kill se quiser interromper o script.
Funciona no Windows 7 com 3 idiomas de teclado e UAC desativado.
Atualização:
Eu estraguei tudo. _WinAPI_SetKeyboardLayout Encaminhar o trabalho apenas às vezes. Padrão envia muito buggy quando a tecla {down} é pressionada. Solução atual baseada em função externa. Mas um problema com esta função você precisa unpress shift e alt para mudar para o próximo idioma do teclado. Deve verificar novamente o código mais tarde.
Update2:
Voltar para _WinAPI_SetKeyboardLayout, mas usando a frente falsa. Não consigo encontrar nenhum problema agora.