我接到了这样的电话:
while(EnumDisplayDevices(NULL, index, &displayDevice, 0)) {
// do stuff
}
我的理解是,这应该将所有图形设备报告为displayDevice,但它只报告一次,多次。我有一块英特尔卡作为我的主适配器而NVidia卡作为辅助卡 - 我希望不仅能够获取两张卡的名称和信息,还能确定应用程序运行的位置with(即应用程序默认为Intel,但我可以更改NVidia控制面板中的默认设置,甚至可以使用Windows资源管理器中的上下文菜单)。但是,呼叫始终报告三个设备......并且所有三个设备都是英特尔。它将英特尔报告为\。\ DISPLAY1,\。\ DISPLAY2和\。\ DISPLAY3。
通过查看它使用的DLL,我可以确认我的代码使用正确的图形卡运行。 (事实上,我需要连接第二台显示器才能让它完全使用NVidia卡 - 否则,无论我选择哪种卡,该应用程序都会在英特尔上启动。无论哪种方式,英特尔卡总是以DISPLAY_DEVICE_ACTIVE的形式返回。
答案 0 :(得分:0)
这是因为DISPLAY_DEVICE结构中的标志,DISPLAY_DEVICE_PRIMARY_DEVICE - 主桌面在设备上。对于具有单个显卡的系统,始终设置此选项。对于具有多个显示卡的系统,只有一个设备可以具有此设置。 要从第二个GPU获取活动显示设备,请使用以下标志条件
while (EnumDisplayDevices(NULL, index, &dd, 0))
{
if(((dd.StateFlags & DISPLAY_DEVICE_ACTIVE) && ((dd.StateFlags & DISPLAY_DEVICE_ACTIVE) || (!(dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))) &&(!(dd.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))))
{
activeDispCount++;
}
index++;
}