AutoHotKey: acceso directo personalizado para cambiar al escritorio siguiente/anterior en Windows 10

AutoHotKey: acceso directo personalizado para cambiar al escritorio siguiente/anterior en Windows 10

Escribí un pequeño script AutoHotKey para cambiar escritorios virtuales en Windows 10. Escribí este código para poder cambiar de escritorio con mi propio método abreviado de teclado personalizado en lugar de usar el método abreviado predeterminado de Windows 10 (GANAR + CTRL + IZQUIERDA/DERECHA).

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, pero sólo si hace clic en una ventana o cualquier otra cosa en el escritorio actual antes de presionar las teclas. Intenté usar la función Clic para simular un clic antes de cambiar de escritorio (lo cual funcionó), pero movió el mouse a las coordenadas en las que hice clic, lo que obviamente no es lo que quiero. He jugado un poco con ControlClick, pero nunca logré que funcionara.

Entonces mi pregunta es la siguiente: ¿hay alguna manera de establecer el foco en el escritorio actual antes de ejecutar el comando para cambiar de escritorio? O tal vez, ¿hay alguna forma diferente de cambiar de escritorio sin simular los accesos directos predeterminados de Win 10?

¡Gracias!


EDITAR 1

Una cosa que he notado es que si hago clic en la barra de tareas y LUEGO hago LWin+ LAlt/ LCtrl, puedo alternar suavemente manteniendo presionado LWiny alternando entre LAlty LCtrl.

Cuando hago clic en la barra de tareas y luego hago LWin+ LAlt, esto es lo que KeyHistory escupe:

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)

Pero cuando SOLO presiono LWin+ LAlt, KeyHistory muestra que los eventos clave se detienen después del evento "Derecha arriba":

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)

El evento LControl Up nunca se activa y eso parece arruinarlo todo.

Respuesta1

A veces, cuando intenta enviar teclas modificadoras (win/ctrl/alt) y la cadena de activación también tiene teclas modificadoras, debe esperar a que se suelten las teclas de activación, o afectarán la cadena de reemplazo a medida que lo descubre. .

Intente usar KeyWaitpara lograr esto. Observe que ahora estamos usando la sintaxis de teclas de acceso rápido frente a cadena activa

#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 cambiar de escritorio, lo anterior funcionó para mí.

En otras ocasiones, hay ocasiones en las que ni siquiera este enfoque funciona y existe otra posible solución. En lugar de esperas clave como estas...

KeyWait LAlt
KeyWait LCtrl

...reemplace con la correspondiente de estas pulsaciones de tecla para borrar el estado de la clave:

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

Respuesta2

A menos que me esté perdiendo un punto en alguna parte, ¿Windows + ctrl+ / flecha no cambia de escritorio? Al menos así es en el mío.

Respuesta3

No sé si sigue siendo relevante, pero 'pzone' de Reddit escribió un script que usa una función con una variable global que recuerda en qué escritorio se encuentra y de esa manera puede vincular una tecla de acceso rápido para alternar entre dos escritorios. Sólo funcionará si tienes 2 escritorios.

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

Respuesta4

Por ejemplo, quiero configurar Av Pág para el siguiente escritorio y Re Pág para el escritorio anterior. Después de instalar AutoHotkey, creo un nuevo script de AutoHotKey, le agrego estos códigos, lo guardo y luego ejecuto el script.

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

y funcionará bien :)

información relacionada