Diferentes layouts de teclado padrão para diferentes aplicativos

1

Sei que é possível, no Windows 10, alternar entre os layouts de idioma do teclado apenas para o aplicativo ativo, mas minha pergunta seria sobre como tornar essas opções padrão.

Quero dizer, quando eu abro, por exemplo, o terminal Cygwin, sempre recebo um layout de teclado húngaro e tenho que mudar para o inglês manualmente. É possível tornar o layout em inglês padrão para o Cygwin (ou qualquer outro layout para qualquer outro aplicativo, em geral)?

Obrigado antecipadamente!

Atenciosamente, Zsolt

    
por laszlzso 27.12.2016 / 12:42

2 respostas

0

Esta é outra maneira de lidar com o problema usando o AutoHotKey, que atribuirá automaticamente um teclado padrão a todos os aplicativos, exceto os específicos (por exemplo, Cygwin)

Este script não irá circular; ele será notificado quando mudar para outra janela.

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:26
0

Usando a AutoHotKey , você pode verificar periodicamente a janela ativa e alternar o layout do teclado com base na janela que se tornou ativa.

Deixe-me citar uma solução semelhante que muda o layout do teclado para o inglês quando a janela QuickSearch do Total Commander se torna ativa. Eu acho que se você entender ferramentas como o cygwin, você deve ser facilmente capaz de ajustar isso para as suas necessidades.

Dica de legibilidade: Nas listagens de scripts abaixo, ponto-e-vírgula inicia um comentário até o final da linha.

link

At first, we create a timer that will launch automation of windows, and insert it somewhere into the auto-executing section of a script.

#Persistent ; The script will be persistent
;(if you have any hotkeys or hotstrings after the auto-execution section,
;this directive is unnecessary)
SetTimer, Auto_Window, 200 ; Move to the specified subroutine every 0.2 seconds
Return ; Finish the auto-executing part

Now the subroutine of automation of windows itself:

Auto_Window:
;a label to call the window automation timer (this subroutine can be placed
;at any place of the script. I like to put subroutines at the end of a script, but it is not compulsory)

; switch the keyobard layout if QuickSearch window is active
IfWinActive, ahk_class TQUICKSEARCH ; if the quick search window in TC is active, then...
{
    if Win_QS = ; if the window has just become active, then...
    {
        SendMessage, 0x50,, 0x4090409,, ahk_class TQUICKSEARCH
        ; Switch the layout to English in the quick search window
        Win_QS = 1 ; Flag that the window is already active 
    }
}
Else ; if the window is not active, then...
    Win_QS = ; Flag that the window is NOT active

Return ; The end of the subroutine that is called by the timer

Consulte a documentação do IfWinActive para saber como reconhecer janelas de sua escolha.

    
por 27.12.2016 / 13:10