Como tornar o layout do teclado atual mais óbvio no Windows 10?

3

Eu falo francês e inglês, e mudo frequentemente de um teclado (francês canadense) para outro (inglês americano). Quando eu escrevo e-mails franceses, o teclado francês se torna necessário para acentos ( por exemplo, é, è, à, ç, etc. ), enquanto usar o código Vim / escrita é muito mais prático com o layout americano. / p>

O problema é que, muitas vezes, começo a digitar, percebo que estou usando o layout de teclado errado e preciso excluir e redigitar o que estava fazendo. Isso é especialmente verdadeiro para o Vim, onde eu posso destruir rapidamente um documento com alguns toques no teclado.

Existe uma maneira de tornar o layout atual do teclado muito mais óbvio do que o pequeno indicador do canto inferior direito? Existem configurações existentes no Windows, ou software que eu poderia instalar, que poderiam ajudar?

Exemplos do que quero dizer quando estou usando um layout de teclado específico:

  • Uma borda de tela colorida
  • Uma sobreposição permanente (modal, pop-up)
  • Alterando a cor da barra de tarefas
  • Etc.

Outras sugestões que ajudariam a reduzir o tempo perdido usando o layout incorreto do teclado são bem-vindas.

    
por Christian Rondeau 27.12.2016 / 17:45

2 respostas

2

Esta é uma alternativa que funciona para mim até agora; Usando o AutoHotkey, mudo dinamicamente para um idioma preferido para um software específico (por exemplo, o Vim usa en-CA e o Slack usa o fr-CA).

Esta não é uma resposta à minha pergunta específica, mas se funcionou para mim, pode funcionar para outras pessoas também:

link

; How to use:
; 1. Install AuthotKey: https://www.autohotkey.com
; 2. Save this script in 'My Documents'
; 3. Create a shortcut in the Startup folder ('Win'+'R', 'shell:startup')
; 4. Change the configurations below
; 5. Start and test the script!

; Configuration

    ; Cultures can be fetched from here: https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx
    ; They must be set twice in the language ID;
    ;   en-US: 0x04090409
    ;   fr-CA: 0x0C0C0C0C

global DefaultLanguage := "fr-CA"
global DefaultLanguageIndentifier := "0x0C0C0C0C"
global SecondaryLanguage := "en-US"
global SecondaryLanguageIndentifier := "0x04090409"
global SecondaryLanguageWindowTitles := "VIM,Visual Studio"

; And the code itself (you should not have to change this)

Gui +LastFound 
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam,lParam )
{
 WinGetTitle, title, ahk_id %lParam%
; 4 is HSHELL_WINDOWACTIVATED, 32772 is HSHELL_RUDEAPPACTIVATED
 If (wParam=4 || wParam=32772) {
    If title contains %SecondaryLanguageWindowTitles%
        SetKeyboard( title, SecondaryLanguage )
    Else
        SetKeyboard( title, DefaultLanguage )
 }
}

SetKeyboard( title, culture )
{
    ; 0x50 is WM_INPUTLANGCHANGEREQUEST.
    Try
    {
        If (culture = SecondaryLanguage)
        {
            PostMessage, 0x50, 0, %SecondaryLanguageIndentifier%,, A
            ; To debug:
            ; ToolTip, Using secondary language %SecondaryLanguage%
            ; Sleep 1000
            ; ToolTip
        }
        Else If (culture = DefaultLanguage)
        {
            PostMessage, 0x50, 0, %DefaultLanguageIndentifier%,, A
            ; To debug:
            ; ToolTip, Using default language %DefaultLanguage%
            ; Sleep 1000
            ; ToolTip
        }
        Else
        {
            ; To debug:
            ; ToolTip, Unknown culture: %culture%
            ; Sleep 1000
            ; ToolTip
        }
    }
    Catch e
    {
        ToolTip, Could not switch to %culture%'n%e%
        Sleep 1000
        ToolTip
    }
}
    
por 27.12.2016 / 23:30
1

Aqui está a minha solução AHK simples para o problema. Isso é codificado para os códigos de layout EN e RU (RU - 1049 (hexadecimal: 419) e EN - 1033 (hexadecimal: 409)).

O algoritmo é simples: se a janela ativa tiver layout de RU, um quadrado vermelho aparecerá na parte superior. Se for o layout EN, ele desaparece. De tal forma, eu sempre vejo se o layout não é EN, então eu posso evitar a digitação errada.

O script procura por janela ativa a cada 600 milissegundos (consulte o parâmetro sleep dentro do loop para ajustá-lo) para que funcione em todo o sistema e mostre corretamente se aplicativos separados tiverem um layout diferente definido. Testado no Windows 7 e 10.
Para ajustar o tamanho e as posições, veja a linha Gui, Show, W100 H100 x980 y500

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
; SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

; get Layout of active window
getactiveKL() {
    active_hwnd := WinExist("A")
    threadID := dllCall("GetWindowThreadProcessId", "uint", active_hwnd, "uint", 0)
    code := dllCall("GetKeyboardLayout", "uint", threadID, "uint") & 0xFFFF
    return code
}
; 1049 - RU (hex: 419)
; 1033 - EN (hex: 409)

OSD_bg = AA0000
Gui, +AlwaysOnTop +Disabled -SysMenu -Caption +Owner
; Gui, Add, Text, , HELLO 
Gui, Color, %OSD_bg%
KL := getactiveKL()     ; scan KL once

Gui, Show, W100 H100 x980 y500, NoActivate
; if US then hide
if (KL = 1033) {
    Gui, Cancel
}

loop {
    KL_prev := KL
    sleep, 600
    KL := getactiveKL()
    if (KL = KL_prev) {
        continue
    }
    if (KL = 1049) {
        Gui, Show, NoActivate
    }
    if (KL = 1033) {
        Gui, Cancel
    }
}

+esc::exitapp ;press Shift-Escape to close script
    
por 06.02.2018 / 04:03