Como envio um evento de mudança de layout de teclado com o autofecus no Windows 7?

4

Eu quero remapear o layout do teclado / mudança de linguagem para Win + Espaço , eu tentei com:

LWin & Space::Send, ^+

Mas parece que não funciona, eu gostaria que ele enviasse uma seqüência Ctrl + Shift para que eu pudesse alternar entre layouts de teclado com Win + Espaço .

Como posso fazer isso funcionar?

    
por Void 05.02.2013 / 12:18

5 respostas

8

O Win + Space funciona bem no meu win7-x64:

; This should be replaced by whatever your native language is. See 
; http://msdn.microsoft.com/en-us/library/dd318693%28v=vs.85%29.aspx
; for the language identifiers list.
ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1)
en := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)

#Space::
w := DllCall("GetForegroundWindow")
pid := DllCall("GetWindowThreadProcessId", "UInt", w, "Ptr", 0)
l := DllCall("GetKeyboardLayout", "UInt", pid)
if (l = en) 
{
    PostMessage 0x50, 0, %ru%,, A
}
else
{
PostMessage 0x50, 0, %en%,, A
}

mais detalhes: link

    
por 02.04.2015 / 05:35
1

Tem certeza de que isso é Ctrl + Deslocamento ? No meu sistema é Alt + Shift . de qualquer maneira, use este comando:

LWin & Space::Send, {Alt Down}{Shift}{Alt up}

Substitua Alt por Ctrl se o seu sistema realmente usar a combinação Ctrl + Shift .

    
por 05.02.2013 / 13:55
1

O script do @Andrei Pak tem as seguintes limitações:

  1. Não funciona na caixa de diálogo FileOpen (e em algumas outras janelas)
  2. Não funciona nas janelas do console
  3. Você precisa saber antecipadamente o KLID do layout (0x04090409, etc) e codificar isso

Este script percorre os layouts ativos do seu sistema usando Win + Espaço :

#Space::PostMessage WM_INPUTLANGCHANGEREQUEST:=0x50, INPUTLANGCHANGE_FORWARD:=0x2,,, % (hWndOwn := DllCall("GetWindow", Ptr, hWnd:=WinExist("A"), UInt, GW_OWNER := 4, Ptr)) ? "ahk_id" hWndOwn : "ahk_id" hWnd

Se você quiser mais controle (tenha > 2 layouts, precise de uma tecla de atalho para definir determinado layout):

F2::Lyt.Set()               ; switch input language.
F3::Lyt.Set("Forward")      ; move forward (cycle) in current layout list
F4::Lyt.Set("-en")          ; set first non-english
F7::Lyt.Set("en", "global") ; set first english layout in all windows
F8::Lyt.Set(2)              ; set second layout in current layout list

Isso depende da classe Lyt ; você precisará fazer referência a isso ou copiá-lo e colá-lo em seu código.

    
por 17.02.2017 / 21:02
0

Você pode facilmente (alterando as duas primeiras linhas para:

$~#Space::LangSwitch(1)
$~#Space up::LangSwitch(2)

) modificar o alternador de layout do teclado do wOxxOm para usar o Win + Space em vez de usar o direito ao controle. E vai funcionar, não importa quais teclas de atalho estão configuradas para alternar layout no Windows (o padrão é Alt + Shift, estou usando Ctrl + Shift).

Por causa da comutação não-nativa-ahk (o script usa WinAPI), todo o script é bastante volumoso, portanto, não o colei inline. Em caso de inacessibilidade de autohotkey.com, aqui está: link

(novamente, todos os créditos vão para wOxxOm, o script de origem está lá: link )

P.S. Esse script é bem antigo e possui byte-offsets codificados, portanto, não tenho certeza se ele funcionará com o Autohotkey.exe de 64 bits ou com o Windows de 64 bits. Eu só tenho 32 bits na mão.

    
por 27.11.2014 / 12:10
-1

Seu script é:

#Space::
Sleep 500
Send, {CTRL}
return

em seguida, instale o puntoswitcher e defina o idioma de alteração no controle de impressão. isso é tudo

    
por 19.12.2015 / 23:37