Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MultiMonitorSetup:以编程方式在辅助监视器之间复制桌面_C#_.net_Winapi_Multiple Monitors_Mirror - Fatal编程技术网

C# MultiMonitorSetup:以编程方式在辅助监视器之间复制桌面

C# MultiMonitorSetup:以编程方式在辅助监视器之间复制桌面,c#,.net,winapi,multiple-monitors,mirror,C#,.net,Winapi,Multiple Monitors,Mirror,我想以编程方式在以下两种模式之间切换: 我已经尝试使用该函数,但失败了。使用以下命令,可以将主监视器克隆到所有连接的显示器上: SetDisplayConfig(0, null, 0, null, SetDisplayConfigFlags.SDC_TOPOLOGY_CLONE | SetDisplayConfigFlags.SDC_APPLY); 不幸的是,我需要复制辅助监视器 我找到了另一个有问题的方法。但我无法将不同显示的源设置为同一引用。先更改主显示,然后再更改SetDis

我想以编程方式在以下两种模式之间切换:

我已经尝试使用该函数,但失败了。使用以下命令,可以将主监视器克隆到所有连接的显示器上:

SetDisplayConfig(0, null, 0, null, 
    SetDisplayConfigFlags.SDC_TOPOLOGY_CLONE | SetDisplayConfigFlags.SDC_APPLY);
不幸的是,我需要复制辅助监视器


我找到了另一个有问题的方法。但我无法将不同显示的源设置为同一引用。先更改主显示,然后再更改SetDisplayConfig()如何

更改显示设置CD的性别\u设置\u主要


然后调用SetDisplayConfig进行克隆。

Windows 7的工作解决方案:

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

  • QueryDisplayConfig()
  • 为所有要复制桌面的“PathInfoArray”项目共享“sourceInfo.id”和“sourceInfo.modeInfoIdx”。e、 g.复制显示“索引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
  • SetDisplayConfig()


  • 要在两个或多个显示器之间扩展显示器(如果克隆了显示器),则要稍微复杂一些:

  • QueryDisplayConfig()
  • 将每个附加克隆显示的信息类型为“Source”的“SourceModeInfo”项添加到“SourceModeInfoArray”:如果配置了两个显示,则需要一个附加的“SourceModeInfo”项(如果克隆了三个=>2个项,依此类推)
  • 扩展其中一个克隆显示的PathInfoArray以指向其他“SourceModeInfo”-项:

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

  • 这只适用于Win7


    在Windows 10 RS1及以后的版本中,SetDisplayConfig()将失败,参数无效。我不太清楚原因,但我认识到在Windows10下,每次重新启动时“ModeInfo.adapterId”(低部分和高部分)都会发生变化。此外,当您通过“Windows设置->显示”复制/扩展时,适配器会发生更改。 这就是为什么我认为在Windows 10下,还必须调整PathModeInfoArray和SourceModeInfoArray的适配器ID


    现在的问题是:我不知道如何获得正确的适配器id。如果有人能在windows 10下解决此问题,我将不胜感激。(我需要一个适用于windows 10的工作解决方案:-()

    在win 10上复制多个监视器的整个过程与将目标监视器的x和y位置设置为源监视器中的位置有关。 因此,首先:

    • 浏览所有路径的列表,找到源和目标监视器的索引(最好只取那些活动的)
    • 从源监视器获取x和y位置(从模式数组-即DISPLAYCONFIG\u mode\u INFO)
    • 设置从源获取的目标监视器x和y位置
    • 创建只包含活动路径的新显示路径数组(很容易将上层活动数组放入新的显示路径数组中)
    • 使用新路径数组和现有模式调用SetDisplayConfig(考虑模式和路径数组的大小

    我想在两个辅助监视器之间克隆桌面。主桌面不应受到影响并显示其自己的内容。-->两个独立区域(主监视器和克隆区域[显示2和3])好的,我明白,如果没有额外的软件,这可能是不可能的。没有API可以像用户通过控制面板所做的那样?(选择两个显示器并在它们之间复制)您好。您有Windows 10的工作代码可供共享吗?我一直在寻找类似的解决方案,可以镜像或断开AVR。@Trm抱歉,恐怕到目前为止我还没有找到W10的工作解决方案。如果您能找到方法,请告诉我:-)