AutoHotKey - Atalho personalizado para alternar para a área de trabalho seguinte/anterior no Windows 10

AutoHotKey - Atalho personalizado para alternar para a área de trabalho seguinte/anterior no Windows 10

Escrevi um pequeno script AutoHotKey para alternar desktops virtuais no Windows 10. Escrevi esse código para poder alternar desktops com meu próprio atalho de teclado personalizado em vez de usar o atalho padrão do Windows 10 (WIN + CTRL + ESQUERDA/DIREITA).

Código:

#LAlt::^#Right ; switch to next desktop with Windows key + Left Alt key
#LCtrl::^#Left ; switch to next desktop with Windows key + Left CTRL key

Este código funciona, mas apenas se você clicar em uma janela ou em qualquer outra coisa na área de trabalho atual antes de pressionar as teclas. Tentei usar a função Click para simular um clique antes de trocar de área de trabalho (o que funcionou), mas ela moveu o mouse para as coordenadas em que cliquei, o que obviamente não é o que desejo. Eu brinquei um pouco com o ControlClick, mas nunca consegui que funcionasse.

Então, minha pergunta é a seguinte: existe uma maneira de definir o foco na área de trabalho atual antes de executar o comando para alternar entre áreas de trabalho? Ou talvez exista uma maneira diferente de alternar entre áreas de trabalho sem simular os atalhos padrão do Win 10?

Obrigado!


EDITAR 1

Uma coisa que notei é que se eu clicar na barra de tarefas e ENTÃO fizer LWin+ LAlt/ LCtrl, posso alternar suavemente mantendo pressionado LWine alternando entre LAlte LCtrl.

Quando clico na barra de tarefas e faço LWin+ LAlt, é isso que KeyHistory mostra:

VK  SC  Type    Up/Dn   Elapsed Key     Window
----------------------------------------------
5B  15B     d   1.91    LWin            
A4  038 h   d   0.31    LAlt            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl        
A4  038 i   u   0.00    LAlt            
A2  01D i   d   0.05    LControl        
5B  15B i   d   0.02    LWin            
27  14D i   d   0.02    Right           
27  14D i   u   0.00    Right           
A2  01D i   u   0.01    LControl        
5B  15B i   u   0.02    LWin            
A2  01D i   d   0.01    LControl        
5B  15B i   d   0.00    LWin            
A2  01D i   u   0.00    LControl        
A4  038 s   u   0.00    LAlt            
5B  15B     u   0.06    LWin            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl
(This is what I want it to do without clicking the taskbar)

Mas quando eu APENAS apertei LWin+ LAlt, KeyHistory mostra que os principais eventos param após o evento "Right Up":

VK  SC  Type    Up/Dn   Elapsed Key     Window
----------------------------------------------
5B  15B     d   1.91    LWin            
A4  038 h   d   0.31    LAlt            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl        
A4  038 i   u   0.00    LAlt            
A2  01D i   d   0.05    LControl        
5B  15B i   d   0.02    LWin            
27  14D i   d   0.02    Right           
27  14D i   u   0.00    Right
(There should be more after this)

O evento LControl Up nunca é acionado e isso parece estragar tudo.

Responder1

Às vezes, quando você está tentando enviar teclas modificadoras (win/ctrl/alt) e a string de acionamento também possui teclas modificadoras, você precisa esperar que as teclas de acionamento sejam liberadas, ou elas afetarão a string de substituição conforme você descobre .

Tente usar KeyWaitpara fazer isso. Observe que agora estamos usando sintaxe de tecla de atalho versus hotstring

#LAlt:: ; switch to next desktop with Windows key + Left Alt key
  KeyWait LAlt
  SendInput #^{Right}
  Return

#LCtrl:: ; switch to previous desktop with Windows key + Left CTRL key
  KeyWait LCtrl
  SendInput #^{Left}
  Return

Para fins de troca de desktops, o procedimento acima funcionou para mim.

Noutras ocasiões, há alturas em que mesmo esta abordagem não funciona e existe outra solução possível. Em vez de esperas importantes como estas ...

KeyWait LAlt
KeyWait LCtrl

... substitua pela tecla correspondente para limpar o estado da tecla:

Send,{LAlt Down}{LAlt Up}
Send,{LCtrl Down}{LCtrl Up}

Responder2

ctrlA menos que eu esteja perdendo algum ponto em algum lugar, o Windows + + / arrow não troca de desktop? Pelo menos acontece no meu.

Responder3

Não sei se ainda é relevante, mas 'pzone' do Reddit escreveu um script que usa uma função com uma variável global que lembra em qual área de trabalho você está, e dessa forma você pode vincular uma tecla de atalho para alternar entre duas áreas de trabalho. Só funcionará se você tiver 2 desktops.

switchedDesktop := false
switchDesktop() 
{
  global switchedDesktop
    if switchedDesktop
    {
        SendEvent ^#{Right}
        switchedDesktop := false
    }
    else
    {
        SendEvent ^#{Left}
        switchedDesktop := true
    }
}

https://www.reddit.com/r/AutoHotkey/comments/3fyudo/automatically_switch_between_windows_10_virtual

Responder4

Por exemplo, quero definir Page Down para a próxima área de trabalho e Page Up para a área de trabalho anterior. Depois de instalar o AutoHotkey, crio um novo script AutoHotKey e adiciono a ele esses códigos, salve-o e execute o script

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

e vai funcionar bem :)

informação relacionada