在“ Windows设置”中,更改显示分辨率通常会在不更改图形驱动程序的显示分辨率的情况下调整桌面大小,从而导致近乎瞬时的“模式切换”。
是否有Windows API可以触发此功能以切换桌面分辨率?使用ChangeDisplaySettings或ChangeDisplaySettingsEx,即使在图形驱动程序中设置了GPU缩放比例,也会导致屏幕暂时空白。
在“ Windows设置”中,更改显示分辨率通常会在不更改图形驱动程序的显示分辨率的情况下调整桌面大小,从而导致近乎瞬时的“模式切换”。
是否有Windows API可以触发此功能以切换桌面分辨率?使用ChangeDisplaySettings或ChangeDisplaySettingsEx,即使在图形驱动程序中设置了GPU缩放比例,也会导致屏幕暂时空白。
设置应用正在使用以下API:SetDisplayConfig
。
样本:(已删除错误检查)
#include <windows.h>
int main()
{
UINT32 numPathArrayElements=0,numModeInfoArrayElements = 0;
UINT32 filter = QDC_ALL_PATHS;
GetDisplayConfigBufferSizes(filter,&numPathArrayElements,&numModeInfoArrayElements);
DISPLAYCONFIG_PATH_INFO* pathArray = new DISPLAYCONFIG_PATH_INFO[numPathArrayElements];
DISPLAYCONFIG_MODE_INFO* modeInfoArray = new DISPLAYCONFIG_MODE_INFO[numModeInfoArrayElements];
ZeroMemory(pathArray,sizeof(DISPLAYCONFIG_PATH_INFO)* numPathArrayElements);
ZeroMemory(modeInfoArray,sizeof(DISPLAYCONFIG_MODE_INFO)* numModeInfoArrayElements);
QueryDisplayConfig(filter,pathArray,&numModeInfoArrayElements,modeInfoArray,NULL);
int ix = pathArray[0].sourceInfo.modeInfoIdx; //assuming path[0] is primary
modeInfoArray[ix].sourceMode.width = 1280;
modeInfoArray[ix].sourceMode.height = 720;
SetDisplayConfig(numPathArrayElements,numModeInfoArrayElements,SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_ALLOW_CHANGES | SDC_SAVE_TO_DATABASE);
return 0;
}