2

如何从 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);
4

1 回答 1

1

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


编辑:

SDC_ALLOW_CHANGES除了标志之外,我认为您的代码没有任何问题。我在具有 Nvidia 卡的系统上尝试了您的代码。它做两件事之一取决于我旋转的目标。如果我旋转两个目标中的第二个,它会忽略更改。在 Nvidia 控制面板中,我可以看到第二台显示器已旋转,但其设置显示为灰色。这向我表明 Nvidia 驱动程序不支持您想要执行的操作。如果我旋转第一个目标,它会导致两个目标旋转。我还尝试将目标缩放更改为DISPLAYCONFIG_SCALING_STRETCHED. 那也没什么区别。SetDisplayConfig 返回 0。Windows 至少似乎对更改感到满意。

您是否尝试过使用 Intel 显示实用程序做您想做的事情?如果您无法使用 Intel 工具执行此操作,则可能是 Intel 驱动程序不支持它。您可能想询问英特尔是否支持它。

于 2013-03-01T15:29:55.220 回答