web-dev-qa-db-ja.com

モニター間でデスクトップを交換する(Windows)

モニター1のデスクトップをモニター2と交換できるようにしたい。

「モニター1に表示されるデスクトップの部分をモニター2に表示されるデスクトップの部分と交換する最良の方法は何ですか。」

Windows 7 64/nVidia。

スワップ

Desktop-A -> Monitor-1
Desktop-B -> Monitor-2

-toggle-

Desktop-A -> Monitor-2
Desktop-B -> Monitor-1

これが仮想デスクトップの仕組みだと思いました!私が見つけた解決策は、両方のモニターにデスクトップを拡張するか、モニター2にモニター-1 /デスクトップ-Aを表示できない場所で各モニターのデスクトップを分離したままにします。

クローン

Desktop-A -> Monitor-1
Desktop-A -> Monitor-2

-toggle-

Desktop-B -> Monitor-1
Desktop-B -> Monitor-2

これらの実際のウィンドウマネージャー、DisplayFusion、VirtuaWin、GiMeSpace、NirCmd、Dexpot、Finestra、mDesktopなどを見てきました...これらは一度に1つのウィンドウを移動でき、ウィンドウを開くモニターを指定することもできますが、デスクトップ全体を交換する方法はありません。

私は私のために窓を動かすためにAHKを書くかもしれません、しかし私は引っ掛かりがあると確信しています。たぶん誰かがさまざまなウィンドウバージョン、表示サイズ、子ウィンドウでこれに取り組んでいます...

シナリオ:1。使用中のデスクトップをプライマリモニターに移動します。 2.2番目のモニターは一時的に使用できなくなります。 (テレビ)

3
Suresurep

ソリューション。スクリプトの確認に戻してくれたTechie007に感謝します。

MonSwap -- https://autohotkey.com/board/topic/17885-dual-monitor-swap/
Win + Shift + Sを使用してすべてのウィンドウを1つのモニターから別のモニターに交換
これまでの私のテストでは毎回働いていました。
3台以上のモニター用に簡単に変更できます。

デュアルモニターツール- http://dualmonitortool.sourceforge.net/download.html
すべてのウィンドウを次のモニターに「回転」させます。
オプション->画面の入れ替え->その他のウィンドウ->画面を前方に回転します。
ウィンドウクラス/タイトルが2つあると、順序が狂うことがあります。

2
Suresurep

Sysinternals製のツールコール「Desktops」を提案できます。これにより、複数のデスクトップを作成し、キーの組み合わせでそれらを切り替えることができます。私自身、Windowsマシンで同様のソリューションを探していましたが、最も近いものはデスクトップでした。

リンク: https://technet.Microsoft.com/en-us/sysinternals/cc817881.aspx

0
padski

別の可能な解決策:

モニター1は仮想デスクトップを使用します
モニター2は、モニター1のポケットベルを示しています

ボーナス:ポケットベルには全画面表示され、「非表示」のデスクトップのみが表示されます。

0
Suresurep

DisplayFusioncanこれを行うには scripting を使用します。

次に、モニター1と2の間で表示されているすべてのウィンドウを交換するDFカスタムスクリプトの例を示します。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;

public static class DisplayFusionFunction
{
    public static void Run(IntPtr windowHandle)
    {
        // Get visible window handles on monitors 1 and 2.
        IntPtr[] windowHandles1 = BFS.Window.GetVisibleWindowHandlesByMonitor(1);
        IntPtr[] windowHandles2 = BFS.Window.GetVisibleWindowHandlesByMonitor(2);

        // Iterate through window handles on each monitor, and send each to the other monitor.
        for (int i = 0; i < windowHandles1.Length; i++) {
            BFS.Window.MoveToMonitor(2, windowHandles1[i]);
        }

        for (int i = 0; i < windowHandles2.Length; i++) {
            BFS.Window.MoveToMonitor(1, windowHandles2[i]);
        }
    }
}
0