20

У меня 3 виртуальных рабочих стола в Windows 10.
На одном из этих рабочих столов я запускаю mstsc в полноэкранном режиме.

Для переключения рабочего стола я могу использовать windows+ctrl+left или right.
Но когда я в полноэкранном режиме mstsc, этот ключ перехватывается mstsc и переключение не работает.
Есть ли способ изменить это поведение?

6 ответов6

20

Я искал решение этой проблемы и только что нашел!

CTRL + ALT + HOME возвращает фокус клавиатуры на хост при работе в удаленном рабочем столе.
Затем вы можете сделать WIN + CTRL + LEFT или RIGHT для переключения между виртуальными рабочими столами.
Не идеально, но я, вероятно, буду иметь дело с AutoHotkey с этими 2 ярлыками.

5

Оказывается, что в клиенте удаленного рабочего стола, вы должны выбрать "Только этот компьютер", когда дело доходит до применения комбинации клавиш Windows.

Локальные ресурсы удаленного рабочего стола

3

Построение ответа электротипа У меня есть сценарий AHK, который позволяет использовать горячие клавиши Ctrl+Win+Left и Ctrl+Win+Right для переключения рабочих столов на локальном компьютере из полноэкранного сеанса RDP, не жертвуя никакими другими ключами в сеансе RDP - т. е. Alt+Tab и аналогичные все еще работают как обычно в сеансе RDP.

Поскольку мы хотим, чтобы обычные сочетания клавиш работали на удаленном компьютере, при запуске сеанса RDP у вас должен быть параметр "Только при использовании полноэкранного режима" для параметра "Применить сочетания клавиш Windows".

Я фактически основал свой сценарий на другом сценарии, который я нашел на форумах AHK.

Что оно делает:

  • Запустите скрипт на локальном компьютере (не на удаленном рабочем столе). Я вставил свой файл в C:\users\<user>\documents\AutoHotkey.ahk чтобы он запускался, когда я запускаю ahk без аргументов.
  • Если вы находитесь в сеансе RDP и нажимаете Ctrl+Win+(влево или вправо), сценарий сначала отправляет 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
3

Если у вас есть сенсорная панель, вы можете попробовать четыре пальца жест.

От службы поддержки Microsoft - жесты сенсорной панели для Windows 10

Переключение виртуальных рабочих столов. Поместите четыре пальца на сенсорную панель и проведите пальцем вправо или влево.

Я работаю с двумя виртуальными рабочими столами в Windows 10. На одном из этих рабочих столов я получаю доступ к Win 7 через удаленный рабочий стол в полноэкранном режиме.

Я могу переключаться между двумя виртуальными рабочими столами одним жестом. Меня устраивает.

3

Во-первых, я хотел, чтобы клавиши Windows работали на удаленном компьютере (например, Alt-Tab ), поэтому у меня есть параметр "Только при использовании полноэкранного режима" для параметра "Применить сочетания клавиш Windows".

Затем, поскольку очень немногие сочетания клавиш способны вывести вас с удаленного рабочего стола, когда он работает в полноэкранном режиме, вы должны использовать CTRL-ALT-HOME , который отображает панель соединений, но также возвращает управление локальному компьютеру.

Поэтому я написал этот AutoHotkey сценарий: switchVirtualDesktopWithRD.ahk. Он полностью основан на этом сценарии, поэтому я не возражаю. Я просто изменил его для своих нужд. Вы можете настроить это для своего ...

В моем случае у меня только два виртуальных рабочих стола: первый - основной, а второй - где я запускаю полноэкранный клиент удаленного рабочего стола.

Что делает скрипт, когда я нажимаю CTRL-ALT-HOME :

  • Если я нахожусь на втором виртуальном рабочем столе, на котором я запускаю полноэкранный клиент удаленного рабочего стола, сначала отображается панель подключения. Затем я снова нажимаю клавишу HOME (с нажатой клавишей CTRL и ALT ) и возвращаюсь к первому главному рабочему столу. Если на втором рабочем столе не выполняется полноэкранный сеанс, первое сочетание сразу переключается на первый рабочий стол.

  • Если я на первом рабочем столе, он сразу переключается на второй.

Другими словами, я всегда использую CTRL-ALT-HOME для переключения между рабочими столами.

-1

Я обошел проблему с необходимостью нажимать и отпускать горячие клавиши, изменяя скрипт так, чтобы он связывал горячие клавиши при запуске и никогда не связывал их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .