簡體   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