Como remover linguagens raramente usadas das teclas de atalho do idioma?

1

Eu digite os 3 idiomas a seguir:

Idioma A - 55% do tempo

Idioma B - 40% do tempo

Idioma C - 5% do tempo

A solução usual seria ter todos os três idiomas instalados e usar Ctrl / Alt-Shift, no entanto, é muito chato ter que trocar o idioma C toda vez que eu alternar entre A e B.

Existe algum tipo de solução que me permita impedir que o Windows troque para o idioma C quando eu pressionar Ctrl / Alt-Shift? Eu poderia então adicionar uma tecla de atalho separada para mudar para o Idioma C.

Estou usando o Windows 7 SP1.

Obrigado.

    
por JonathanReez 01.09.2014 / 10:29

2 respostas

1

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.

    
por 01.09.2014 / 23:54
1

Eu tenho a mesma situação e defino teclas de atalho diferentes para cada idioma, por exemplo:

  • Ctrl + Deslocamento + 1 para a linguagem A,
  • Ctrl + Deslocamento + 2 para a linguagem B,
  • Ctrl + Deslocamento + 3 para a linguagem C

Isso permite alternar para o idioma desejado em apenas um toque de tecla. Isso pode ser definido em Painel de controle \ Todos os itens do painel de controle \ Idioma \ Configurações avançadas \ Alterar as teclas de atalho da barra de idiomas (é o caminho do Windows 10, no Windows 7 pode ser diferente, mas em algum lugar semelhante). A caixa de diálogo é semelhante a: Alterar a sequência das teclas

    
por 13.10.2016 / 09:16