2013-03-01 83 views
1

如何从C++或C#中分别更改每个屏幕的屏幕方向?在镜像模式下具有双屏幕显示配置。 Intel显卡已安装在机器上。我尝试了EnumDisplaySettings函数和DeviceMode结构。但是,它只能在扩展模式下工作。如果我在镜像模式下尝试通过此功能改变方向,则两个屏幕都设置为相同的方向。也许有方法通过英特尔驱动程序SDK或任何其他本地Windows 7功能来更改此设置?在镜像模式下以编程方式更改屏幕方向Windows 7

UPDATE 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); 
+0

镜像模式的要点是让一个屏幕精确显示另一个屏幕上的内容。为什么你会希望他们在不同的方向在这种模式? – RobH 2013-03-01 17:27:07

+0

有一种装置,屏幕安装旋转180度以改善某个位置的视角。如果连接了其他显示器,其中一个屏幕始终以镜像模式翻转。在扩展模式下,可以单独旋转它们。 – Yaroslav 2013-03-01 22:08:41

+0

对!我忘记了这个用例。 – RobH 2013-03-04 17:13:58

回答

1

您可以尝试使用CCD APIs。这些功能可以让您操作VidPN拓扑当前会话。它们不是最简单的函数调用虽然。


编辑:

我不从也许是SDC_ALLOW_CHANGES标志看不到你的代码错误,除了我想你的代码,我的系统具有Nvidia显卡上它做的两件事情取决于哪个目标。我旋转。如果我旋转两个目标中的第二个,它会忽略这个变化。在Nvidia控制面板中,我可以看到第二个显示器已旋转,但其设置呈灰色。这表明Nvidia驱动程序不支持你想要做的事情。如果我旋转第一个目标,它会导致两个目标旋转。我也尝试将目标缩放比例更改为DISPLAYCONFIG_SCALING_STRETCHED。这也没有什么区别。 SetDisplayConfig返回0.Windows至少似乎对变化感到满意。

您是否尝试过使用英特尔显示实用程序来执行所需操作?如果你无法使用英特尔工具,那么英特尔驱动程序可能不支持它。你可能想问一个来自Intel的人是否支持它。

+0

这似乎是我真正需要的。奇怪我以前找不到这个API。谢谢,我会尝试。 – Yaroslav 2013-03-01 22:27:40

+0

请在第一篇文章中查看我的代码。它仍然翻转两个屏幕。有任何想法吗? – Yaroslav 2013-03-04 01:50:08

+0

评论在编辑部分。 – Camford 2013-03-04 12:26:10

相关问题