我想使用 MSDN CCD API 扩展和复制我的显示器。 为此,我为带有两个显示器的机箱编写了一个小型测试应用程序。粘贴下面的代码。
hr = GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS | QDC_VIRTUAL_MODE_AWARE, &cPath, &cMode);
std::vector<DISPLAYCONFIG_PATH_INFO> pathArray1(cPath);
std::vector<DISPLAYCONFIG_MODE_INFO> modeArray1(cMode);
hr = QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS | QDC_VIRTUAL_MODE_AWARE, &cPath, &pathArray1[0], &cMode, &modeArray1[0], NULL);
pathArray1[0].flags |= DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE;
pathArray1[1].flags |= DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE;
pathArray1[0].targetInfo.targetModeInfoIdx = DISPLAYCONFIG_PATH_TARGET_MODE_IDX_INVALID;
pathArray1[0].targetInfo.desktopModeInfoIdx = DISPLAYCONFIG_PATH_DESKTOP_IMAGE_IDX_INVALID;
pathArray1[1].targetInfo.targetModeInfoIdx = DISPLAYCONFIG_PATH_TARGET_MODE_IDX_INVALID;
pathArray1[1].targetInfo.desktopModeInfoIdx = DISPLAYCONFIG_PATH_DESKTOP_IMAGE_IDX_INVALID;
pathArray1[0].sourceInfo.sourceModeInfoIdx = DISPLAYCONFIG_PATH_SOURCE_MODE_IDX_INVALID;
pathArray1[0].sourceInfo.cloneGroupId = 1;
pathArray1[1].sourceInfo.sourceModeInfoIdx = DISPLAYCONFIG_PATH_SOURCE_MODE_IDX_INVALID;
pathArray1[1].sourceInfo.cloneGroupId = 0;
hr = SetDisplayConfig(cPath, &pathArray1[0], 0, NULL, SDC_APPLY | SDC_TOPOLOGY_SUPPLIED | SDC_ALLOW_PATH_ORDER_CHANGES);
问题在于,一旦我指定 cloneGroupId , SetDisplayConfig 总是以 0x00000057结尾:参数不正确。 当 cloneFroupId 设置为 DISPLAYCONFIG_PATH_CLONE_GROUP_INVALID 时,该函数将传递并扩展所有监视器。
我做错了什么?