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