web-dev-qa-db-ja.com

Windows 10:全画面リモートデスクトップで仮想デスクトップを切り替える

Windows 10に3つの仮想デスクトップがあります。
それらのデスクトップの1つで、mstscフルスクリーンを実行します。

デスクトップを切り替えるには、windows + ctrl + leftまたはrightを使用できます。
しかし、フルスクリーンのmstscにいるとき、このキーはmstscによってキャプチャされ、切り替えが機能しません。
この動作を変更する方法はありますか?

35
r03

私はこの問題の解決策を探していて、それを見つけました!

CTRLALTHOME リモートデスクトップでは、キーボードフォーカスをホストに戻します。
その後、あなたはできる WINCTRLLEFT または RIGHT 仮想デスクトップを切り替える。
理想的ではありませんが、おそらくこれらの2つのショートカットをオートホットキーで処理します。

37
BignOOse

リモートデスクトップクライアントでは、Windowsキーの組み合わせを適用する場合は、[このコンピューターのみ]を選択する必要があることがわかりました。

Remote Desktop Local Resources

7
Antony

タッチパッドがある場合は、4本指ジェスチャーを試すことができます。

から Microsoftサポート-Windows 10のタッチパッドジェスチャー

仮想デスクトップを切り替える:タッチパッドに4本の指を置き、右または左にスワイプします。

Windows 10で2つの仮想デスクトップを使用しています。これらのデスクトップの1つで、全画面モードのリモートデスクトップを介してWin 7にアクセスしています。

この1つのジェスチャーで2つの仮想デスクトップを切り替えることができます。わたしにはできる。

5
smperez

まず、リモートコンピューターでWindowsキーを機能させたいので(たとえば[Alt-Tab)]、[Windowsキーの組み合わせを適用する]設定に[全画面を使用する場合のみ]を設定しました。

次に、全画面表示のときにリモートデスクトップから移動できる主要な組み合わせがほとんどないため、CTRL-ALT-HOMEを使用する必要があります。これにより、接続バーが表示されますが、ローカルコンピューターにコントロールが返されます。

だから私はこれを書いた autohotkey スクリプト:switchVirtualDesktopWithRD.ahk。それは完全に このスクリプト に基づいているため、私は信用しません。私は単に私のニーズのためにそれを変更しました。あなたはそれをあなたのものに合わせることができます...

私の場合、仮想デスクトップは2つしかありません。1つはメインデスクトップで、2つ目は全画面リモートデスクトップクライアントを実行する場所です。

CTRL-ALT-HOMEを押したときのスクリプトの動作:

  • 全画面のリモートデスクトップクライアントを実行している2番目の仮想デスクトップにいる場合は、最初に接続バーが表示されます。次に、もう一度HOMEキーを押します(CTRLALTはまだ押したまま)。最初のメインデスクトップに戻ります。 2番目のデスクトップで全画面セッションが行われていない場合、最初の組み合わせはすぐに最初のデスクトップに切り替わります。

  • 最初のデスクトップにいる場合、すぐに2番目のデスクトップに切り替わります。

つまり、私は常にCTRL-ALT-HOMEを使用してデスクトップを切り替えます。

4
electrotype

構築 エレクトロタイプの答え 有効にする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+(Left または right)スクリプトが最初に送信する Ctrl+Alt+Home RDPのタイトルバーをフォーカスするには、デスクトップ切り替えキーのコンボを送信して実際にデスクトップを切り替えます.

注:2つ以上の仮想リモートデスクトップ(1つのローカル仮想デスクトップ、フルスクリーンのRDPウィンドウを備えた2つの仮想デスクトップなど)を使用すると、少しバグが生じますそれぞれに)しかし、私は今それ以上取り組む時間はありません。問題は、1つの仮想リモートデスクトップから別のデスクトップに切り替えると、ホットキーのバインドを解除して再バインドする必要があり、これを検出できません(検出できないはずです-RDPタイトルバーに別のウィンドウクラスがありますが、そうではありません) t常にこれを受け取ります)。

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
3
Luke