Створюючи відповідь на електротип, у мене є сценарій AHK, який дозволить Ctrl+Win + Leftта Ctrl+ Win+ Rightгарячі клавіші перемикати настільні комп’ютери на локальному комп’ютері, в межах повноекранного сеансу RDP, не приносячи шкоди жодним іншим клавішам в межах сеансу RDP - тобто Alt+ Tabта подібних усіх досі працювати як нормально протягом сеансу RDP.
Оскільки ми хочемо, щоб звичайна клавіша швидкого доступу працювала на віддаленому комп'ютері, під час запуску сеансу RDP ви повинні мати параметр "Тільки при використанні повного екрану" для параметра "Застосувати комбінації клавіш Windows".
Я фактично базував свій сценарій на іншому сценарії, який я знайшов на форумах AHK.
Що це робить:
- Запустіть сценарій на локальній машині (а не на віддаленому робочому столі). Я вставив мою,
C:\users\<user>\documents\AutoHotkey.ahk
щоб вона запускалася, коли я починаю ах без аргументів.
- Якщо ви знаходитесь у сеансі RDP і натискаєте Ctrl+ Win+ ( Leftабо right), сценарій спочатку надсилає Ctrl+ Alt+ Homeдля фокусування заголовка рядка RDP, а потім надсилає комбіновану клавішу перемикача на робочому столі, щоб фактично переключити робочий стіл.
Примітка. При використанні двох або більше віртуальних настільних настільних комп'ютерів стає дещо помилковим (наприклад, один локальний віртуальний робочий стіл, два віртуальних робочих стільниці з вікном RDP на повноекранному екрані на кожному), але я не маю часу працювати над цим більше зараз . Проблема полягає в тому, що ви переходите з одного віртуального віддаленого робочого столу на інший, вам потрібно від’єднати та повторно зв’язати гарячу клавішу, і у неї виникають проблеми з виявленням цього (хоча це не повинно - рядок заголовка RDP має інший клас вікон, але він не робить ' t завжди підбирайте це).
Сценарій 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