在镜像模式下以编程方式改变屏幕方向

本文关键字:方式 改变 屏幕 方向 编程 镜像 模式 | 更新日期: 2023-09-27 18:01:48

如何从c++或c#单独更改每个屏幕的屏幕方向?在镜像模式下具有双屏幕显示配置。机器上安装了英特尔显卡。我尝试了EnumDisplaySettings功能和DeviceMode结构。然而,它只在扩展模式下工作。如果我尝试在镜像模式下通过此功能改变方向,则两个屏幕都设置为相同的方向。也许有一种方法可以通过英特尔驱动程序SDK或任何其他本机windows 7功能来更改此设置?

更新1:

这是我用CCD API尝试的代码。它仍然旋转两个显示=(

)
UINT32 PathArraySize = 0;
UINT32 ModeArraySize = 0;
DISPLAYCONFIG_PATH_INFO* PathArray;
DISPLAYCONFIG_MODE_INFO* ModeArray;
DISPLAYCONFIG_TOPOLOGY_ID CurrentTopology;  
SetDisplayConfig(0,NULL,0,NULL,SDC_TOPOLOGY_CLONE|SDC_APPLY); //set to clone mode
GetDisplayConfigBufferSizes(QDC_ALL_PATHS, &PathArraySize, &ModeArraySize);
PathArray =   (DISPLAYCONFIG_PATH_INFO*)malloc(PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));
memset(PathArray, 0, PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));
ModeArray =   (DISPLAYCONFIG_MODE_INFO*)malloc(ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));
memset(ModeArray, 0, ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));
LONG ret = QueryDisplayConfig(QDC_DATABASE_CURRENT,&PathArraySize, PathArray, &ModeArraySize, ModeArray, &CurrentTopology);
PathArray++;
PathArray->targetInfo.rotation =  DISPLAYCONFIG_ROTATION_ROTATE180; //set Second display rotated 180
PathArray--;
SetDisplayConfig(PathArraySize,PathArray,ModeArraySize,ModeArray, SDC_APPLY | SDC_SAVE_TO_DATABASE | SDC_ALLOW_CHANGES | SDC_USE_SUPPLIED_DISPLAY_CONFIG); //apply rotation
free(PathArray);
free(ModeArray);

在镜像模式下以编程方式改变屏幕方向

您可以尝试使用CCD api。这些功能允许您为当前会话操作VidPN拓扑。它们不是最容易调用的函数。


编辑:

我看不出你的代码有什么问题,除了SDC_ALLOW_CHANGES标志。我在我的系统上测试了你的代码,我的系统有一个Nvidia卡。它会做两件事中的一件取决于我旋转的目标。如果我旋转第二个目标,它会忽略这个变化。在Nvidia控制面板中,我可以看到第二台显示器是旋转的,但它的设置是灰色的。在我看来,这表明Nvidia驱动程序不支持你想要做的事情。如果我旋转第一个目标,它会导致两个目标都旋转。我还尝试将目标缩放更改为DISPLAYCONFIG_SCALING_STRETCHED。这也没有什么区别。SetDisplayConfig返回0。至少Windows似乎对这个变化很满意。

你试过用英特尔显示工具做你想做的吗?如果你不能用英特尔工具做到这一点,那么可能英特尔驱动程序不支持它。