Windows 10:在全屏远程桌面中切换虚拟桌面

roe*_*and 54 windows remote-desktop windows-10

我在 Windows 10 中有 3 个虚拟桌面。
在其中一个桌面上,我全屏运行 mstsc。

要切换桌面,我可以使用 windows+ctrl+left 或 right。
但是当我在全屏 mstsc 中时,这个键被 mstsc 捕获并且切换不起作用。
有没有办法改变这种行为?

Big*_*Ose 68

我一直在寻找解决此问题的方法,但刚刚找到了一个!

CTRL+ ALT+HOME提供了远程桌面键盘焦点返回到主机时。
然后,你可以做WIN+ CTRL+LEFTRIGHT虚拟桌面之间进行切换。
不理想,但我可能会让 autohotkey 处理这两个快捷方式。

  • 真是太棒了!!我一直在寻找这样的东西,我发现最好的是 Ctrl + alt + break(pause),它关闭全屏模式 - 非常不舒服!如果这是`stackoverflow`,我会给你赏金,但我不能在这里这样做。谢谢+1! (5认同)
  • 非常喜欢你,接受我的观点!! (2认同)

Ant*_*ony 13

事实证明,在远程桌面客户端中,应用 Windows 组合键时应选择“仅此计算机”。

远程桌面本地资源

  • 那行得通,但现在我不能使用 ALT+TAB (6认同)
  • 我也有同样的问题。我希望有一种方法可以让它忽略 win+ctrl+left/right (2认同)
  • @EgeÖzcan 有(有点)! [参见这个答案](https://superuser.com/a/1206416/161208) (2认同)

小智 6

首先,我希望 Windows 键可以在远程计算机上工作(Alt-Tab例如),因此我将“仅在使用全屏时”设置为“应用 Windows 键组合”设置。

然后,由于很少有组合键可以让您在全屏时退出远程桌面,因此您必须使用CTRL-ALT-HOME,它带来了连接栏,但也将控制权还给了本地计算机。

所以我写了这个自动热键脚本:switchVirtualDesktopWithRD.ahk。它完全基于这个脚本,所以我不相信。我只是根据我的需要修改了它。你可以根据自己的情况调整...

就我而言,我只有两个虚拟桌面:第一个是主桌面,第二个是我运行全屏远程桌面客户端的地方。

当我按下时脚本会做什么CTRL-ALT-HOME

  • 如果我在第二个虚拟桌面上,即运行全屏远程桌面客户端的虚拟桌面,则首先显示连接栏。我再按HOME一次键(与CTRLALT仍然按下),我回到了第一,主桌面。如果第二个桌面上没有全屏会话,第一个组合会立即切换到第一个桌面。

  • 如果我在第一个桌面上,它会立即切换到第二个桌面。

换句话说,我总是CTRL-ALT-HOME用来在桌面之间切换。


小智 6

如果您有触摸板,则可以尝试四指手势。

来自Microsoft 支持 - 适用于 Windows 10 的触摸板手势

切换虚拟桌面:将四根手指放在触摸板上并向右或向左滑动。

我正在 Windows 10 中使用两个虚拟桌面。在其中一个桌面上,我通过远程桌面以全屏模式访问 Win 7。

我可以用这个单一的手势在两个虚拟桌面之间切换。这个对我有用。

  • @NishantLakhara - 它确实可以在全屏模式下工作,至少在我手中...... (2认同)

Luk*_*uke 5

建立关电铸的答案我有一个AHK脚本,使Ctrl+ Win+LeftCtrl+ Win+Right热键来切换本地计算机上的桌面,全屏RDP会话中,在不牺牲任何其他键的RDP会话中-即Alt+Tab和类似的都还是在 RDP 会话中正常工作。

由于我们希望常规快捷键在远程计算机上工作,因此在启动 RDP 会话时,您必须将“仅在使用全屏时”设置为“应用 Windows 键组合”。

实际上,我的脚本基于我在 AHK 论坛上找到的另一个脚本

它能做什么:

  • 在本地机器上运行脚本(而不是在远程桌面上)。我粘贴了我的,C:\users\<user>\documents\AutoHotkey.ahk所以当我开始 ahk 时它会运行,没有任何参数。
  • 如果您在 RDP 会话中并按Ctrl+ Win+(Leftright),脚本首先发送Ctrl+ Alt+Home以聚焦 RDP 标题栏,然后发送切换桌面键组合以实际切换桌面。

注意:当使用两个或更多虚拟远程桌面(例如,一个本地虚拟桌面,两个虚拟桌面,每个桌面上都有一个全屏 RDP 窗口)时,它会有点问题,但我现在没有时间处理它了. 问题是当您从一个虚拟远程桌面切换到另一个虚拟远程桌面时,您必须解除绑定并重新绑定热键,并且无法检测到这一点(尽管它不应该 - RDP 标题栏具有不同的窗口类,但它没有)不要总是拿起它)。

啊哈脚本:

;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
Run Code Online (Sandbox Code Playgroud)