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


20

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

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


我也需要一个答案!
Antony

1
Upvoting,因为这会很棒。选择适用于RDP或计算机的Windows组合键会很不错
MikeMurko

Answers:


20

我正在寻找这个问题的解决方案,只找到一个!

CTRL + ALT + 在远程桌面中将键盘焦点重新设置为主机。
那你可以做 赢得 + CTRL + 剩下 要么 在虚拟桌面之间切换。
不理想,但我可能会有autohotkey处理这两个快捷方式。


那太棒了!我正在寻找这样的东西一段时间,我发现最好的是Ctrl + alt + break(暂停),这关闭了全屏模式 - 它非常不舒服!如果是的话,我会给你赏金 stackoverflow,但我不能在这做到这一点。谢谢+1!
Kiril Kirov

Lov ya这么多,接受我的观点!
Fedaykin

5

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

Remote Desktop Local Resources


3
这有效,但现在我不能使用ALT + TAB
r03

我也有同样的问题。我希望有一种方法可以让它忽略win + ctrl + left / right
Ege Özcan

1
@EgeÖzcan有(有点)! 看到这个答案
Luke

3

首先,我希望Windows键可以在远程计算机上运行( Alt-Tab 例如),所以我在“应用Windows键组合”设置中“仅在使用全屏时”。

然后,由于很少有关键组合能够在全屏时让你离开远程桌面,你必须使用 CTRL-ALT-HOME,它带来连接栏,但也将控制权交还给本地计算机。

所以我写了这个 AutoHotkey的 脚本: switchVirtualDesktopWithRD.ahk 。它完全基于 这个脚本 所以我没有信任。我只是修改了它 我的需要 。你可以调整它到你的...

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

我按下时脚本的作用 CTRL-ALT-HOME

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

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

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


我喜欢这个。如果我们在远程计算机上运行ahk脚本(并将它们设置为在您登录时启动),我想知道我们是否可以翻译 CTRL-WIN-LEFTCTRL-ALT-HOME 并从远程ahk触发焦点开关到RDP连接栏。然后你只需要按 CTRL-WIN-LEFT 两次让它切换台式机。
Luke

我得到它的工作,但脚本只在本地机器上运行 - 遥控器上不需要啊:D
Luke

3

建设 电影的答案 我有一个启用的AHK脚本 按Ctrl + 赢得 + 剩下 按Ctrl + 赢得 + 热键可以在全屏RDP会话中切换本地计算机上的桌面,而不会牺牲RDP会话中的任何其他密钥 - 即 Alt键 + 标签 在RDP会话中,所有仍然正常工作。

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

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

它能做什么:

  • 在本地计算机上运行脚本(而不是在远程桌面上)。我把我粘贴进了 C:\users\<user>\documents\AutoHotkey.ahk 所以当我开始没有参数的ahk时它会运行。
  • 如果您在RDP会话中并按 按Ctrl + 赢得 +( 剩下 要么 )脚本首先发送 按Ctrl + Alt键 + 要关注RDP标题栏,然后发送切换桌面键组合以实际切换桌面。

注意: 当使用两个或更多虚拟远程桌面时(例如,一个本地虚拟桌面,两个虚拟桌面,每个桌面都有一个全屏RDP窗口),它会变得有点儿麻烦但我现在没有时间再处理它了。问题是当你从一个虚拟远程桌面切换到另一个虚拟远程桌面时,你必须解除绑定并重新绑定热键,并且它无法检测到这一点(虽然它不应该--RDP标题栏有不同的窗口类,但它没有'总是选择这个)。

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

有时感觉它不起作用 - 我发现我必须释放并重新按下 Ctrl+Win 有时当我从本地桌面转到遥控器或反之亦然时。如果它不起作用,请尝试它,或者增加脚本顶部的SLEEP_VAL以增加发送之间的延迟 Ctrl+Alt+HomeCtrl+Win+Left
Luke

3

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

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

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

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

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


-1

我解决了这个问题,不得不通过更改脚本来按下并释放热键,以便在运行时绑定热键并且永远不会解除绑定。


请澄清并在此答案中添加更多内容,以传达您的建议。你知道,考虑在这个答案中添加一些支持你所说的内容。否则,请仔细阅读 “为什么我需要50点评论才能发表评论” 确保您了解如何开始评论。
Pimp Juice IT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.