En s'appuyant sur la réponse de electrotype, j'ai un script AHK qui permet d'activer les raccourcis Ctrl+Win+Gauche et Ctrl+Win+Droite pour basculer entre les bureaux sur l'ordinateur local, depuis une session RDP en plein écran, sans sacrifier d'autres touches dans la session RDP - par exemple Alt+Tabulation et autres fonctionnent toujours normalement dans la session RDP.
Comme nous voulons que le raccourci régulier fonctionne sur l'ordinateur distant, vous devez configurer l'option "Uniquement en plein écran" pour le paramètre "Appliquer les combinaisons de touches de la touche Windows" lors du démarrage de la session RDP.
J'ai en fait basé mon script sur un autre script que j'ai trouvé sur les forums AHK.
Ce que ça fait :
- Exécutez le script sur votre machine locale (pas sur le bureau à distance). J'ai collé le mien dans
C:\users\\documents\AutoHotkey.ahk
donc il s'exécute quand je démarre AHK sans arguments.
- Si vous êtes dans une session RDP et que vous appuyez sur Ctrl+Win+(Gauche ou Droite), le script envoie d'abord Ctrl+Alt+Accueil pour mettre le focus sur la barre de titre RDP, puis envoie la combinaison de touches pour réellement basculer entre les bureaux.
Remarque : ça devient un peu bogué lorsque vous utilisez deux bureaux virtuels ou plus (par exemple un bureau virtuel local, deux bureaux virtuels avec une fenêtre RDP en plein écran sur chacun) mais je n'ai pas le temps de travailler dessus pour le moment. Le problème survient lorsque vous passez d'un bureau virtuel distant à un autre, vous devez supprimer puis réinscrire la combinaison de touches et il a du mal à détecter cela (bien que ça ne devrait pas - la barre de titre RDP a une classe de fenêtre différente mais ce n'est pas toujours pris en compte).
Script AHK :
;setTimer, windowwatch, 500
#persistant
#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