Membangun off jawaban electrotype ini saya memiliki script AHK yang akan memungkinkan Ctrl+ Win+ Leftdan Ctrl+ Win+ Righthotkeys untuk beralih desktop pada komputer lokal, dari dalam sesi RDP layar penuh, tanpa mengorbankan salah kunci lain dalam sesi RDP - yaitu Alt+ Tabdan mirip semua masih berfungsi seperti biasa dalam sesi RDP.
Karena kami ingin agar tombol pintasan biasa berfungsi di komputer jarak jauh, Anda harus memiliki "Hanya saat menggunakan layar penuh" untuk pengaturan "Terapkan kombinasi tombol Windows" saat memulai sesi RDP.
Saya sebenarnya mendasarkan skrip saya dari skrip lain yang saya temukan di forum AHK.
Apa fungsinya:
- Jalankan skrip pada mesin lokal Anda (bukan pada desktop jarak jauh). Saya menempelkan milik saya ke dalam
C:\users\<user>\documents\AutoHotkey.ahk
sehingga berjalan ketika saya mulai ahk tanpa argumen.
- Jika Anda berada di dalam sesi RDP dan tekan Ctrl+ Win+ ( Leftatau right) skrip pertama-tama mengirim Ctrl+ Alt+ Homeuntuk memfokuskan bilah judul RDP kemudian mengirimkan kombo tombol sakelar desktop untuk benar-benar mengganti desktop.
Catatan: itu menjadi sedikit buggy ketika menggunakan dua atau lebih desktop virtual-remote (mis. Satu desktop virtual lokal, dua desktop virtual dengan jendela RDP layar penuh pada masing-masing) tetapi saya tidak punya waktu untuk mengerjakannya lagi sekarang. . Masalahnya adalah ketika Anda beralih dari satu desktop virtual-jauh ke yang lain, Anda harus melepaskan dan memutar kembali hot key dan mengalami kesulitan mendeteksi ini (meskipun seharusnya tidak - bilah judul RDP memiliki kelas jendela yang berbeda tetapi tidak t selalu mengambil ini).
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