Costruendo la risposta dell'elettrotipo, ho uno script AHK che consentirà ai tasti di scelta rapida Ctrl+ Win+ Lefte Ctrl+ Win+ Rightdi cambiare desktop sul computer locale, da una sessione RDP a schermo intero, senza sacrificare altre chiavi all'interno della sessione RDP - vale a dire Alt+ Tabe simili tutti ancora funziona normalmente durante la sessione del PSR.
Poiché vogliamo che il normale tasto di scelta rapida funzioni sul computer remoto, all'avvio della sessione RDP è necessario avere "Solo quando si utilizza lo schermo intero" per l'impostazione "Applica combinazioni di tasti Windows".
In realtà ho basato il mio script su un altro script che ho trovato sui forum AHK.
Cosa fa:
- Esegui lo script sul tuo computer locale (non sul desktop remoto). Ho incollato il mio in
C:\users\<user>\documents\AutoHotkey.ahk
modo che corra quando inizio ahk senza argomenti.
- Se ci si trova all'interno di una sessione RDP e si preme Ctrl+ Win+ ( Lefto right) lo script invia prima Ctrl+ Alt+ Homeper focalizzare la barra del titolo RDP, quindi invia la combinazione di tasti del desktop del commutatore per cambiare effettivamente il desktop.
Nota: diventa un po 'buggy quando si usano due o più desktop virtuali-remoti (ad esempio un desktop virtuale locale, due desktop virtuali con una finestra RDP a schermo intero su ciascuno) ma non ho più tempo di lavorarci su adesso . Il problema è quando si passa da un desktop virtuale-remoto a un altro, è necessario separare e ricollegare il tasto di scelta rapida e ha problemi a rilevarlo (anche se non dovrebbe - la barra del titolo RDP ha una classe di finestre diversa ma non lo fa ' t prenderlo sempre).
Ahk script:
;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