cloneGroupId of MSDN CCD API when set doesn't work

0

I want to extend and duplicate my monitors with MSDN CCD API. For this purpose, I wrote a small test app for the case with two monitors. Pasting the code below.

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);

The problem is that once I specify cloneGroupId, SetDisplayConfig always ends up with 0x00000057 : The parameter is incorrect. When cloneFroupId is set to DISPLAYCONFIG_PATH_CLONE_GROUP_INVALID, the function pass and extends all monitors.

What I am doing wrong?

msdn
user32
asked on Stack Overflow Nov 22, 2018 by Nastic

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0