多显示器设置:在次要显示器之间通过程序复制桌面

4
我希望能够以编程方式在以下两种模式之间切换: example image 我已经尝试使用SetDisplayConfig函数,但是失败了。使用下面的命令可以将主显示器克隆到所有连接的显示器:
SetDisplayConfig(0, null, 0, null, 
    SetDisplayConfigFlags.SDC_TOPOLOGY_CLONE | SetDisplayConfigFlags.SDC_APPLY);

很不幸,我需要复制次要监视器!

我在问题如何制作克隆或扩展模式中找到了另一种方法。但我无法让它工作,以将不同显示的源设置为相同的参考。

3个回答

4

Windows 7 工作解决方案:

要在两个(或更多)连接设备之间克隆/复制桌面,您只需要执行以下操作:

  1. QueryDisplayConfig()
  2. 共享要复制的所有“PathInfoArray”项的“sourceInfo.id”和“sourceInfo.modeInfoIdx”。例如:将显示器“索引1”复制到索引为“2”和“3”的显示器上:

    • PathInfoArray[2].sourceInfo.id = PathInfoArray[1].sourceInfo.id
    • PathInfoArray[2].sourceInfo.modeInfoIdx = PathInfoArray[1].sourceInfo.modeInfoIdx
    • PathInfoArray[3].sourceInfo.id = PathInfoArray[1].sourceInfo.id
    • PathInfoArray[3].sourceInfo.modeInfoIdx = PathInfoArray[1].sourceInfo.modeInfoIdx
  3. SetDisplayConfig()


如果要在两个或多个显示器之间扩展显示(如果显示器已经被克隆),则会更加复杂:

  1. QueryDisplayConfig()
  2. 在“SourceModeInfoArray”中为每个额外克隆显示器添加一个具有infoType“Source”的“SourceModeInfo”项。 如果配置了两个显示器,则需要额外添加一个“SourceModeInfo”项(如果已经克隆了三个,则需要添加2个项,依此类推)
  3. 将 PathInfoArray 扩展到其中一个克隆显示器,以指向附加的“SourceModeInfo”项:

    • PathInfoArray[2].sourceInfo.id = AddItem.sourceInfo.id;
    • PathInfoArray[2].sourceInfo.modeInfoIdx = AddItem.sourceInfo.modeInfoIdx;
  4. SetDisplayConfig()

这只适用于Win7。


在 Windows 10 RS1 及更高版本中,SetDisplayConfig() 将失败并显示无效参数。 我不确定原因,但我注意到在 Windows 10 下,“ModeInfo.adapterId”(低部和高部)在每次重启时都会更改。此外,通过“Windows 设置 -> 显示”进行复制/扩展时,适配器也会更改。因此,我认为在 Windows 10 下,您还需要调整 PathModeInfoArray 和 SourceModeInfoArray 的适配器 ID。

目前的问题是:我不知道如何获得正确的适配器 ID 来解决这个问题。如果有人对在 Windows 10 下解决此问题有答案/提示,我将非常感激。(我需要在 Windows 10 上找到可行的解决方案:-()


你好。你有可分享的适用于Windows 10的工作代码吗?我一直在寻找类似的解决方案,可以镜像或断开我的AVR。 - Trm
@Trm 抱歉,我目前还没有找到适用于W10的解决方案。如果您找到了方法,请告诉我 :-) - h4kun4m4t4t4

1
整个关于在Win 10上复制多个监视器的故事与将目标监视器的X和Y位置设置为源监视器中找到的位置有关。因此,首先:
  • 浏览所有路径列表,并查找源监视器和目标监视器的索引(最好只选择活动的监视器)
  • 从源监视器中获取X和Y位置(从模式数组 - 即DISPLAYCONFIG_MODE_INFO中获取)
  • 将目标监视器的X和Y位置设置为源监视器中获取的位置
  • 创建新的显示路径数组,仅包含活动路径(将活动数组放入新数组中很容易)
  • 使用新路径数组和现有模式调用SetDisplayConfig(考虑到模式和路径数组的大小)

1

我想在两个次要显示器之间克隆桌面。主桌面不应受影响,应显示自己的内容。 --> 两个独立区域(主监视器和克隆区域[显示器2和3]) - h4kun4m4t4t4
好的,我明白了,可能需要额外的软件才能实现。 - Isaack Rasmussen
是否存在与用户通过控制面板执行相同操作的API?(在两个显示器之间选择并进行复制) - h4kun4m4t4t4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接