如何从 C++ 或 C# 中单独更改每个屏幕的屏幕方向?在镜像模式下具有双屏显示配置。 机器上安装了 Intel 显卡。我尝试了 EnumDisplaySettings 函数和 DeviceMode 结构。但是,它仅适用于扩展模式。如果我尝试在镜像模式下通过此功能更改方向,则两个屏幕都设置为相同的方向。也许有一种方法可以通过 Intel 驱动程序 SDK 或任何其他 native 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 APIs .这些函数允许您操纵 VidPN当前 session 的拓扑。不过,它们并不是最容易调用的函数。
编辑:
除了 SDC_ALLOW_CHANGES
标志外,我没有发现您的代码有任何问题。我在我有 Nvidia 卡的系统上试过你的代码。它做两件事之一取决于我旋转的目标。如果我旋转两个目标中的第二个,它会忽略更改。在 Nvidia 控制面板中,我可以看到第二台显示器已旋转,但其设置显示为灰色。这向我表明 Nvidia 驱动程序不支持您想要执行的操作。如果我旋转第一个目标,它会导致两个目标都旋转。我还尝试将目标缩放更改为 DISPLAYCONFIG_SCALING_STRETCHED
。那也没有什么区别。 SetDisplayConfig 返回 0。至少 Windows 似乎对更改感到满意。
您是否尝试过使用 Intel 显示实用程序执行您想要的操作?如果您无法使用 Intel 工具执行此操作,则可能是 Intel 驱动程序不支持它。您可能想询问 Intel 的人员是否支持它。
关于c# - 在镜像模式 Windows 7 中以编程方式更改屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15158679/