繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM