我希望能够将显示器 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 等等……它们可以一次移动一个窗口,甚至可以指定窗口应该在哪个显示器上打开,但它们无法交换整个桌面。
我可能会编写一个 AHK 来帮我移动窗口,但我确信会有一些障碍。也许有人已经针对各种 Windows 版本、显示尺寸、子窗口解决了这个问题……
场景:1. 将正在使用的桌面移至主显示器。2. 第二台显示器暂时不可用。(电视)
答案1
解决方案。感谢 Techie007 引导我重新查看脚本:
MonSwap -https://autohotkey.com/board/topic/17885-dual-monitor-swap/
使用 Win+Shift+S 将所有窗口从一个显示器切换到另一个显示器,
到目前为止,在我的测试中每次都有效。
可以轻松修改为 3 个以上显示器。
双显示器工具 -http://dualmonitortool.sourceforge.net/download.html
将所有窗口“旋转”到下一个显示器。
选项 -> 交换屏幕 -> 其他窗口 -> 向前旋转屏幕。
当有两个窗口类别/标题时,有时会使它们的顺序混乱。
答案2
下面是一个 DF 自定义脚本示例,它将在监视器 1 和 2 之间交换所有可见窗口:
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]);
}
}
}
答案3
我可以推荐 Sysinternals 开发的名为“Desktops”的工具。它允许您拥有多个桌面,并通过组合键在它们之间切换。我自己一直在我的 Windows 机器上寻找类似的解决方案,而我找到的最接近的解决方案是 Desktops。
关联:https://technet.microsoft.com/en-us/sysinternals/cc817881.aspx
答案4
另一个可能的解决方案:
监视器 1 使用虚拟桌面
监视器 2 显示监视器 1 的寻呼机
奖励:寻呼机将全屏显示,并且只显示“隐藏”的桌面。