Construindo resposta do eletrótipo Eu tenho um script AHK que permitirá Ctrl + Win + Esquerda e Ctrl + Teclas de atalho Win + Direita para alternar áreas de trabalho no computador local , de dentro de uma sessão RDP de tela inteira, sem sacrificar quaisquer outras chaves dentro da sessão RDP - ou seja, Alt + Tab e similares, tudo funciona normalmente na sessão RDP. / p>
Como queremos que a tecla de atalho normal 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 Eu encontrei nos fóruns do AHK.
O que faz:
- Execute o script em sua máquina local (não na área de trabalho remota). Eu colei o meu em
C:\users\<user>\documents\AutoHotkey.ahk
, então ele é executado quando eu começo o ahk sem argumentos.
- Se você estiver dentro de uma sessão RDP e pressionar Ctrl + Win + ( Esquerda ou direita ) script primeiro envia Ctrl + Alt + Início para focar a barra de título RDP e envia a combinação de teclas do desktop para mudar a área de trabalho.
Observação: ele fica um pouco bugs ao usar dois ou mais desktops virtuais remotos (por exemplo, um desktop virtual local, dois desktops virtuais com uma janela RDP de tela inteira em cada um), mas eu não tem tempo para trabalhar mais agora. A questão é quando você muda de uma área de trabalho remota virtual para outra, você tem que desvincular e ligar a tecla de atalho e está tendo problemas para detectar isso (embora não deva - a barra de título RDP tem uma classe de janela diferente, mas não t sempre pegar isso).
Roteiro 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