Winapi 如何使用Direct3D9确定哪些显示器连接到同一物理设备?

Winapi 如何使用Direct3D9确定哪些显示器连接到同一物理设备?,winapi,direct3d,multiple-monitors,Winapi,Direct3d,Multiple Monitors,使用Direct3D9,我可以使用IDirect3D9::GetAdapterCount()统计可用的适配器。但是,这会返回输出数量,即单个双头图形卡的输出数量为2。使用Win32 API,我可以使用以下代码段枚举连接的显示设备和监视器: DISPLAY_DEVICE displayDevice; ::ZeroMemory(&displayDevice, sizeof(displayDevice)); displayDevice.cb = sizeof(displayDevice);

使用Direct3D9,我可以使用
IDirect3D9::GetAdapterCount()
统计可用的适配器。但是,这会返回输出数量,即单个双头图形卡的输出数量为2。使用Win32 API,我可以使用以下代码段枚举连接的显示设备和监视器:

DISPLAY_DEVICE displayDevice;
::ZeroMemory(&displayDevice, sizeof(displayDevice));
displayDevice.cb = sizeof(displayDevice);

/* Enumerate adapters. */
for (UINT i = 0; ::EnumDisplayDevices(NULL, i, &displayDevice, 0); i++) {

    /* Enumerate the monitors. */
    for (UINT j = 0; ::EnumDisplayDevices(displayDevice.DeviceName, j, 
            &displayDevice, 0); j++) {
        // Do stuff here
    } 
}
我的问题是:在D3D中是否有类似的功能,如果我随后使用
D3DCREATE_ADAPTERGROUP_device
创建D3D设备,它也能正常工作?如果没有,我是否可以对设备的枚举顺序做出任何假设,以便将Win32 API结果与D3D适配器匹配?换句话说:Direct3D适配器0是否保证是
EnumDisplayDevices
返回的第一个适配器


另外:我刚刚发现,我可以将
d3dapter\u IDENTIFIER9
中的设备名与Win32的设备名进行匹配。然而,有没有一种方法可以首先从D3D获取物理设备?

如果有人感兴趣,我找到了方法:
D3DCAPS9
中的
NumberOfAdapterSingGroup
包含适配器组主设备(具有多个交换链的物理设备)的输出数量并且对于从属适配器(“非物理”适配器)为零。MSDN声明:

NumberOfAdapterSingGroup对于常规适配器为1,对于多磁头卡的主适配器大于1。对于多磁头卡的从属适配器,该值将为0。每张卡最多只能有一个主卡,但可能有多个下级卡