[英]changing screen orientation programmatically in mirror mode windows 7
如何从C ++或C#分别更改每个屏幕的屏幕方向? 在镜像模式下具有双屏显示配置。 机器上已安装Intel图形卡。 我尝试了EnumDisplaySettings函数和DeviceMode结构。 但是,它仅在扩展模式下工作。 如果我尝试通过此功能在镜像模式下更改方向,则两个屏幕都将设置为相同的方向。 也许有一种方法可以通过Intel驱动程序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至少似乎对此更改感到满意。
您是否尝试过使用Intel显示实用程序做您想做的事情? 如果您无法使用Intel工具执行此操作,则可能是Intel驱动程序不支持它。 您可能想问英特尔公司的某人是否支持它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.