如何在Windows中获取用于特定显示器的显示适配器?

时间:2011-10-17 12:49:10

标签: c++ winapi

在Mac上,我可以使用以下内容打印出用于特定显示器的适配器:

io_registry_entry_t dspPort = CGDisplayIOServicePort(displays[i]);
CFDataRef model_;
model_ = (CFDataRef)IORegistryEntrySearchCFProperty(dspPort,kIOServicePlane,CFSTR("model"),
                                                    kCFAllocatorDefault,
                                                    kIORegistryIterateRecursively | kIORegistryIterateParents);

if (model_) {
  newLine();
  String model((const char*)CFDataGetBytePtr(model_), CFDataGetLength(model_));
  log.printf("Adapter: %s", model.buf);
  CFRelease(model_);
}

示例输出 - 适配器:AMD Radeon HD 6750M

使用displays[i]

填充CGGetActiveDisplayList(nDisplays, displays, &nDisplays);的位置

有没有办法在Windows上进行等效操作?我使用EnumDisplayMonitors在所有显示中循环播放。

我可以使用EnumDisplayDevices获取适配器列表,但是如何查看哪个适配器连接到哪个适配器?

修改

使用:

for (int i=0; EnumDisplayDevicesA(monitorInfo.szDevice, i, &dev, 0); i++) {
    newLine();
    log.printf("Display Device: %s",(char*)dev.DeviceString);
  }

我可以获取显示器本身的设备名称,但不能获取它们所连接的适配器!

1 个答案:

答案 0 :(得分:3)

我可以想到三种方法:

  1. EnumDisplayDevices文档提到dwFlags参数可用于获取可与SetupAPI functions一起使用的设备ID。该API为get device information提供了一系列功能。因此,您可以从EnumDisplayDevices获取设备ID,将其粘贴到某些SetupAPI函数中以获取监视器设备结构,并从那里获取显示适配器设备ID。

  2. 您可以通过WMI使用Win32_VideoController类来获取显示适配器信息。

  3. 我可以想象一些DirectX API可用于获取有关已安装图形硬件的信息。