Diferentes layouts de teclado padrão para diferentes aplicativos
1
Eu 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 fazer com que essas opções sejam 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)?
Essa é 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á fazer um loop; ele será notificado quando mudar para outra janela.
; 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
}
}
Muito obrigado pela sua resposta, e gostaria de me desculpar por responder depois de tanto tempo. Vai tentar a sua solução o mais rápido possível! :)
laszlzso
Não tem problema, espero que funcione para você. Lembre-se de que, se você estiver em um programa "executado como administrador", a menos que o AutoHotKey também seja executado como administrador, o idioma não será alterado.
Christian Rondeau
Apenas tentei e funciona lindamente com o Notepad ++, ou RStudio, mas o Cygwin pode ser apenas um exemplo de problemas que você mencionou no seu comentário anterior. Leia após o problema e encontrou isto . Apesar de eu ter completado as instruções nada mudou - não importa como eu dou o nome de Cygwin no script ( cygwin , Cygwin64 , centímetro , etc.), a linguagem não é alterada quando o aplicativo é iniciado). Alguma sugestão, por favor?
laszlzso
Ei @ ZsoltLászló - desculpe, eu parei de usar o cygwin, então não posso dizer. O link que você compartilhou teria sido minha sugestão, caso contrário minhas duas teorias são: A) a janela cygwin (mintty?) Não recebe os eventos de teclado, é pai (apenas uma teoria) e B) algo no cygwin processa chaves de maneira diferente , então eles não alcançam o Windows ... Não tenho certeza.
Christian Rondeau
Obrigado pela resposta, irá verificar nos próximos dias e compartilhar as experiências.
laszlzso
0
Usando 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 este para suas necessidades.
Dica de legibilidade: Nas listagens de script abaixo, o ponto-e-vírgula inicia um comentário até o final da linha.
Em primeiro lugar, criamos um temporizador que irá iniciar a automação de janelas,
e insira-o em algum lugar na seção de execução automática de um 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
Agora a sub-rotina de automação do próprio windows:
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
Usando 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 este para suas necessidades.
Dica de legibilidade: Nas listagens de script abaixo, o ponto-e-vírgula inicia um comentário até o final da linha.
http://www.script-coding.com/AutoHotkey/AhkRussianEng.html
Referir-se documentação para IfWinActive para aprender a reconhecer janelas de sua escolha.
fonte