Windows 10: alterne o desktop virtual enquanto estiver na área de trabalho remota em tela cheia

28

Eu tenho três áreas de trabalho virtuais no Windows 10.
Em uma dessas áreas de trabalho, eu executo o mstsc em tela cheia.

Para mudar de área de trabalho, posso usar o Windows + Ctrl + Esquerda ou Direita.
Mas quando estou em um mstsc em tela cheia, essa chave é capturada pelo mstsc e a alternância não funciona.
Existe uma maneira de mudar esse comportamento?

r03
fonte
Eu preciso de uma resposta sobre isso também!
Antony
11
Voto positivo, porque isso seria ótimo. Seria bom para escolher quais combinações de teclas do Windows aplicam-se a RDP ou computador
MikeMurko

Respostas:

32

Eu estava procurando uma solução para este problema e acabei de encontrar uma!

CTRL+ ALT+ HOMEretorna o foco do teclado para o host na Área de Trabalho Remota.
Então você pode fazer WIN+ CTRL+ LEFTou RIGHTpara alternar entre áreas de trabalho virtuais.
Não é o ideal, mas provavelmente terei que lidar com a autohotkey com esses 2 atalhos.

BignOOse
fonte
11
Isso é tão brilhante !! Eu estava procurando algo assim por algum tempo e o melhor que encontrei foi Ctrl + alt + break (pausa), que fecha o modo de tela cheia - é muito desconfortável! Eu daria a você uma recompensa se fosse isso stackoverflow, mas não posso fazer isso aqui. Obrigado +1!
22418 Kiril Kirov
Te amo demais, pegue meus pontos positivos !!
Fedaykin
7

Acontece que no cliente de área de trabalho remota, você deve selecionar "Somente este computador" quando se trata de aplicar a combinação de teclas do Windows.

Recursos locais da área de trabalho remota

Antony
fonte
4
Isso funciona, mas agora não consigo usar ALT + TAB
r03 14/03
11
Eu também tenho o mesmo problema. Eu gostaria que houvesse uma maneira de torná-lo ignorar apenas ganhar + ctrl + esquerda / direita
Ege Özcan
11
@ EgeÖzcan existe (mais ou menos)! Veja esta resposta
Lucas
4

Primeiro, eu queria que as teclas do Windows funcionassem no computador remoto ( Alt-Tabpor exemplo), então tenho "Somente ao usar a tela inteira" para a configuração "Aplicar combinações de teclas do Windows".

Então, como poucas combinações de teclas conseguem tirá-lo da área de trabalho remota quando estiver em tela cheia, é necessário usá-lo CTRL-ALT-HOME, o que traz a barra de conexão, mas também devolve o controle ao computador local.

Então eu escrevi essa autohotkey script: switchVirtualDesktopWithRD.ahk . É completamente baseado nesse script , então não aceito créditos. Eu simplesmente o modifiquei para minhas necessidades . Você pode ajustá-lo ao seu ...

No meu caso, só tenho dois desktops virtuais: o primeiro é o principal e o segundo é onde executo um cliente de desktop remoto em tela cheia.

O que o script faz quando pressiono CTRL-ALT-HOME:

  • Se eu estiver na segunda área de trabalho virtual, aquela em que executo um cliente de área de trabalho remota em tela cheia, que primeiro mostre a barra de conexão. Em seguida, pressiono a HOMEtecla novamente (com CTRLe ALTainda pressionado) e volto à primeira área de trabalho principal. Se não houver uma sessão em tela cheia na segunda área de trabalho, a primeira combinação mudará imediatamente para a primeira área de trabalho.

  • Se eu estiver na primeira área de trabalho, ela mudará para a segunda imediatamente.

Em outras palavras, eu sempre uso CTRL-ALT-HOMEpara alternar entre os desktops.

eletrótipo
fonte
Eu gosto disso. Se rodarmos um script ahk no (s) computador (es) remoto (s) (e configurá-los para iniciar quando você fizer login), será que podemos traduzir um CTRL-WIN-LEFTpara CTRL-ALT-HOMEe acionar a opção de foco na barra de conexão RDP do ahk remoto? Depois, basta pressionar CTRL-WIN-LEFTduas vezes para alternar os desktops.
Lucas
Eu tenho que trabalhar, mas com um script executando apenas na máquina local - sem necessidade de ahk no controle remoto: D
Lucas
3

Construindo a resposta do eletrótipo, tenho um script AHK que permitirá que as teclas de atalho Ctrl+ Win+ Lefte Ctrl+ Win+ Rightalternem as áreas de trabalho no computador local, a partir de uma sessão RDP em tela cheia, sem sacrificar nenhuma outra tecla na sessão RDP - ou seja, Alt+ Tabe similares, todos ainda funcionar normalmente dentro da sessão RDP.

Como queremos que a tecla de atalho comum funcione no computador remoto, você deve ter "Somente ao usar a tela inteira" para a configuração "Aplicar combinações de teclas do Windows" ao iniciar a sessão RDP.

Na verdade, eu baseei meu script em outro script que encontrei nos fóruns do AHK.

O que faz:

  • Execute o script na sua máquina local (não na área de trabalho remota). Eu colei o meu para C:\users\<user>\documents\AutoHotkey.ahkque ele funcione quando eu inicio o ahk sem argumentos.
  • Se você estiver dentro de uma sessão RDP e pressionar Ctrl+ Win+ ( Leftou right), o script primeiro envia Ctrl+ Alt+ Homepara focar a barra de título do RDP e envia a combinação de teclas da área de trabalho para realmente mudar a área de trabalho.

Nota: fica um pouco problemático ao usar duas ou mais áreas de trabalho remotas virtuais (por exemplo, uma área de trabalho virtual local, duas áreas de trabalho virtuais com uma janela RDP em tela cheia em cada uma), mas não tenho mais tempo para trabalhar nela agora . O problema é que quando você alterna de uma área de trabalho remota virtual para outra, é necessário desvincular e reconectar a tecla de acesso e está tendo problemas para detectar isso (embora não deva - a barra de título do RDP tem uma classe de janela diferente, mas não sempre pegue isso).

Script 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
Luke
fonte
Às vezes parece que não está funcionando - acho que tenho que liberar e pressionar novamente as Ctrl+Winteclas quando vou de uma área de trabalho local para uma remota ou vice-versa. Tente isso, se não estiver funcionando, ou aumente o SLEEP_VAL na parte superior do script para aumentar o atraso entre o envio Ctrl+Alt+HomeeCtrl+Win+Left
Luke
3

Se você possui um touchpad, pode tentar o gesto com quatro dedos.

Do Suporte da Microsoft - Gestos do touchpad para Windows 10

Alternar áreas de trabalho virtuais: coloque quatro dedos no touchpad e deslize para a direita ou esquerda.

Estou trabalhando com duas áreas de trabalho virtuais no Windows 10. Em uma dessas áreas de trabalho, estou acessando um Win 7 através da Área de trabalho remota no modo de tela cheia.

Eu posso alternar entre os dois desktops virtuais com esse único gesto. Funciona para mim.

smperez
fonte
-1

Eu resolvi o problema com a necessidade de pressionar e liberar as teclas de atalho, alterando o script para vincular as teclas de atalho quando executadas e nunca desatá-las.

Greg
fonte
Esclareça e adicione um pouco mais de contexto a esta resposta para transmitir exatamente o que você está sugerindo. Você sabe, considere adicionar alguma referência a esta resposta para apoiar o que você declara. Caso contrário, leia "Por que preciso de 50 reputação para comentar" para garantir que você entenda como pode começar a comentar.
Pimp Juice IT