在镜像模式Windows 7中以编程方式更改屏幕方向

时间:2013-03-01 13:15:13

标签: c# c++ intel screen-orientation

如何从C ++或C#单独更改每个屏幕的屏幕方向?在镜像模式下具有双屏显示配置。 机器上安装了Intel显卡。我尝试了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);

1 个答案:

答案 0 :(得分:1)

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


编辑:

除了SDC_ALLOW_CHANGES标志之外,我没有看到您的代码有任何问题。我在我的系统上尝试了你的代码,它有一个Nvidia卡。它做两件事中的一件取决于我旋转的目标。如果我旋转两个目标中的第二个,则忽略该变化。在Nvidia控制面板中,我可以看到第二台显示器已旋转,但其设置显示为灰色。这告诉我,Nvidia驱动程序不支持你想做的事情。如果我旋转第一个目标,则会导致两个目标都旋转。我也尝试将目标缩放比例更改为DISPLAYCONFIG_SCALING_STRETCHED。这也没有区别。 SetDisplayConfig返回0. Windows至少似乎对此更改感到满意。

您是否尝试使用英特尔显示实用程序执行所需操作?如果您无法使用英特尔工具,那么英特尔驱动程序可能不支持它。你可能想问一下英特尔是否支持它。