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

标签 c# c++ intel screen-orientation

如何从 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/

相关文章:

c# - ExpressionTree Compile() 方法生成 stackoverflow 异常

c# - 每天早上 7 点调用 Web 服务方法

c++ - 选择语句和隐式转换只给我字符串的第一个字符

c++ - Ubuntu 16.04 下的 Android linphone 构建给出 CC 和 CXX 的 cmake 路径变量错误?

c++ - 我可以在一行代码中将符合条件的 vector 的所有元素插入到集合中吗

c++ - 英特尔 TBB 与 CilkPlus

c - 在 XCode 中为模拟器编译内联 asm 但无法为设备编译

c# - GridView 问题

c++ - 如何在任务组中等待 Intel TBB 中的单个任务并杀死其他任务?

c# - 使用 Entity Framework Codefirst 存储 TimeSpan - SqlDbType.Time 溢出