A partir de la respuesta del electrotipo, tengo un script AHK que permitirá que las teclas de acceso rápido Ctrl+ Win+ Lefty Ctrl+ Win+ Rightcambien los escritorios en la computadora local, desde una sesión RDP de pantalla completa, sin sacrificar ninguna otra tecla dentro de la sesión RDP, es decir, Alt+ Taby similares, todo aún funciona normalmente dentro de la sesión RDP.
Como queremos que la tecla de acceso directo normal funcione en la computadora remota, debe tener "Solo cuando se usa la pantalla completa" para la configuración "Aplicar combinaciones de teclas de Windows" al iniciar la sesión RDP.
De hecho, basé mi script en otro script que encontré en los foros de AHK.
Que hace:
- Ejecute el script en su máquina local (no en el escritorio remoto). Pegué el mío
C:\users\<user>\documents\AutoHotkey.ahk
para que se ejecute cuando empiezo ahk sin argumentos.
- Si está dentro de una sesión RDP y presiona Ctrl+ Win+ ( Lefto right) el script primero envía Ctrl+ Alt+ Homepara enfocar la barra de título RDP y luego envía la combinación de teclas de cambio de escritorio para cambiar realmente el escritorio.
Nota: se pone un poco defectuoso cuando se usan dos o más escritorios remotos virtuales (por ejemplo, un escritorio virtual local, dos escritorios virtuales con una ventana RDP de pantalla completa en cada uno), pero ahora no tengo tiempo para trabajar en eso. . El problema es que cuando cambia de un escritorio remoto virtual a otro, tiene que desvincular y volver a vincular la tecla de acceso rápido y tiene problemas para detectar esto (aunque no debería hacerlo; la barra de título RDP tiene una clase de ventana diferente pero no t siempre recoge esto).
Guión Ahk:
;setTimer, windowwatch, 500
#persistent
#usehook
SLEEP_VAL := 500
DEBUG := false
keys_bound := false
while true {
;Debug("Waiting")
sleep, SLEEP_VAL
keys_bound := WaitBind()
}
WaitBind() {
WinWaitActive, ahk_class TscShellContainerClass
Debug("bind")
hotkey LWin & Left, ctrl_win_left_key, on
hotkey LWin & Right, ctrl_win_right_key, on
return true
}
WaitUnbind() {
WinWaitNotActive, ahk_class TscShellContainerClass
Debug("unbind")
hotkey LWin & Left, ctrl_win_left_key, off
hotkey LWin & Right, ctrl_win_right_key, off
return false
}
Debug(msg) {
global DEBUG
if (DEBUG) {
tooltip %msg%
settimer, TooltipClear, 2000
}
}
return
z_key:
; simple script for testing - change the z to 'he'
send, he
Debug("done z")
return
j_key:
; testing if we can activate the RDP title bar
send {Ctrl down}{Alt down}{Home}{Alt up}{Ctrl up}
Debug("done j")
Return
ctrl_win_left_key:
; we are intercepting all Win+Left combinations so we have to do Win+Shift+Left and Win+Left manually to preserve them inside the RDP
GetKeyState, shiftState, Shift
GetKeyState, ctrlState, Ctrl
if (shiftState = "D") {
; by default in windows Ctrl+Shift+Win+Left will act like Shift+Win+Left - shift takes precedence
Debug("done shift win left")
send {Shift down}{LWin down}{Left}{LWin up}{Shift up}
} else if (ctrlState = "D") {
Debug("done ctrl win left")
; the magic happens here
send {Ctrl down}{Alt down}{Home}{Alt up}{Ctrl up}
keys_bound := WaitUnbind()
;Sleep, SLEEP_VAL ;give the OS time to focus on the title bar
send {Ctrl down}{LWin down}{Left}{LWin up}{Ctrl up}
} else {
Debug("done win left")
send {LWin down}{Left}{LWin up}
}
Return
ctrl_win_right_key:
; we are intercepting all Win+Right combinations so we have to do Win+Shift+Right and Win+Right manually to preserve them inside the RDP
GetKeyState, shiftState, Shift
GetKeyState, ctrlState, Ctrl
if (shiftState = "D") {
; by default in windows Ctrl+Shift+Win+Left will act like Shift+Win+Left - shift takes precedence
Debug("done shift win right")
send {Shift down}{LWin down}{Right}{LWin up}{Shift up}
} else if (ctrlState = "D") {
Debug("done ctrl win right")
; the magic happens here
send {Ctrl down}{Alt down}{Home}{Alt up}{Ctrl up}
keys_bound := WaitUnbind()
;Sleep, SLEEP_VAL ;give the OS time to focus on the title bar
send {Ctrl down}{LWin down}{Right}{LWin up}{Ctrl up}
} else {
Debug("done win right")
send {LWin down}{Right}{LWin up}
}
Return
TooltipClear:
; just a routine to turn off tooltip after x milliseconds
tooltip
settimer, TooltipClear, off
Return
windowwatch:
ifwinactive ahk_class TscShellContainerClass
{
Debug("bind")
hotkey LWin & Left, ctrl_win_left_key, on
hotkey LWin & Right, ctrl_win_right_key, on
}
else
{
Debug("unbind")
hotkey LWin & Left, ctrl_win_left_key, off
hotkey LWin & Right, ctrl_win_right_key, off
}
Return