Construindo a resposta do eletrótipo, tenho um script AHK que permitirá que as teclas de atalho Ctrl+ Win+ Lefte Ctrl+ Win+ Rightalternem as áreas de trabalho no computador local, a partir de uma sessão RDP em tela cheia, sem sacrificar nenhuma outra tecla na sessão RDP - ou seja, Alt+ Tabe similares, todos ainda funcionar normalmente dentro da sessão RDP.
Como queremos que a tecla de atalho comum funcione no computador remoto, você deve ter "Somente ao usar a tela inteira" para a configuração "Aplicar combinações de teclas do Windows" ao iniciar a sessão RDP.
Na verdade, eu baseei meu script em outro script que encontrei nos fóruns do AHK.
O que faz:
- Execute o script na sua máquina local (não na área de trabalho remota). Eu colei o meu para
C:\users\<user>\documents\AutoHotkey.ahk
que ele funcione quando eu inicio o ahk sem argumentos.
- Se você estiver dentro de uma sessão RDP e pressionar Ctrl+ Win+ ( Leftou right), o script primeiro envia Ctrl+ Alt+ Homepara focar a barra de título do RDP e envia a combinação de teclas da área de trabalho para realmente mudar a área de trabalho.
Nota: fica um pouco problemático ao usar duas ou mais áreas de trabalho remotas virtuais (por exemplo, uma área de trabalho virtual local, duas áreas de trabalho virtuais com uma janela RDP em tela cheia em cada uma), mas não tenho mais tempo para trabalhar nela agora . O problema é que quando você alterna de uma área de trabalho remota virtual para outra, é necessário desvincular e reconectar a tecla de acesso e está tendo problemas para detectar isso (embora não deva - a barra de título do RDP tem uma classe de janela diferente, mas não sempre pegue isso).
Script 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