
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 KeyWait
para 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 :)