【问题标题】:Is there an API for the Windows 10 instant resolution change?是否有用于 Windows 10 即时分辨率更改的 API?
【发布时间】:2020-03-08 12:04:58
【问题描述】:

在 Windows 设置中,更改显示器的分辨率通常会在不更改图形驱动程序的显示分辨率的情况下调整桌面大小,从而导致几乎瞬时的“模式切换”。

是否有可以触发此功能以切换桌面分辨率的 Windows API?使用 ChangeDisplaySettings 或 ChangeDisplaySettingsEx 会导致屏幕暂时空白,即使在图形驱动程序中设置了 GPU 缩放。

【问题讨论】:

  • 你说的是 DPI 变化吗?
  • 不,我说的是显示模式更改;如果我说从 1920x1080 到 1280x720,变化会立即发生,不会出现屏幕空白。
  • 好像用ChangeDisplaySettings改成1280x720,再用Windows设置改回1920x1080,也会瞬间黑屏。
  • 这是因为 ChangeDisplaySettings 缩小了 GPU 的视频模式,Windows 必须重新展开它才能再次显示更高分辨率。当显示分辨率已经很高时,我注意到显示设置做了一些奇怪的魔法来降低桌面分辨率,而无需在驱动程序中执行模式切换。我仍然很好奇是否有 API 可以复制 Windows 设置的行为并执行软件“模式切换”。

标签: windows winapi video graphics gpu


【解决方案1】:

设置应用正在使用此 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,&numPathArrayElements,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, pathArray, numModeInfoArrayElements, modeInfoArray, SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_ALLOW_CHANGES | SDC_SAVE_TO_DATABASE);
    return 0;
}

【讨论】:

  • 就是这样!非常感谢!
  • 如何使用 SDC 调用将 BPC 更改为 10/12/16?或者还有其他方法吗?假设面板支持每种颜色格式 8、10、12 和 16 位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2017-10-19
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多