您好我正在使用以下代码片段来获取 Windows 7 系统中显示适配器的数量。我有一个连接到我的显示器的 NVidia GT 120,以及一个充当我的 GPU 处理器的 NVidia Quadro 4000。
因为两个显示适配器都有多个输出端口,使用以下代码,我实际上得到了 GT120 的 2 个 Display_Device 实例和 Quadro 4000 的 2 个。我解决这个问题的方法实际上是使用 DeviceKey 组件(MSDN 说没有使用,但是它实际上是 DisplayDevice 结构的注册表项)作为删除重复实例的标准。
有没有人对这个问题有更好的或官方的解决方案?
FARPROC EnumDisplayDevices;
HINSTANCE hInstUser32;
DISPLAY_DEVICE DispDev;
char szSaveDeviceName[32];
BOOL bRet = TRUE;
hInstUser32 = LoadLibrary("User32.DLL");
if (!hInstUser32) return FALSE;
// Get the address of the EnumDisplayDevices function
EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUser32,"EnumDisplayDevicesA");
if (!EnumDisplayDevices) {
FreeLibrary(hInstUser32);
return FALSE;
}
ZeroMemory(&DispDev, sizeof(DISPLAY_DEVICE));
DispDev.cb = sizeof(DISPLAY_DEVICE);
// After the first call to EnumDisplayDevices,
// DispDev.DeviceString is the adapter name
while (EnumDisplayDevices(NULL, nDeviceIndex++, &DispDev, 0)) {
//getdevice
}
FreeLibrary(hInstUser32);
return bRet;