【问题标题】:How can you get the display adapter used for a particular monitor in Windows?如何获得用于 Windows 中特定显示器的显示适配器?
【发布时间】:2011-12-09 06:54:20
【问题描述】:

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

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

【问题讨论】:

  • 出于好奇(因为您刚刚接受了我的回答):您选择了哪条路线(如果有的话)?
  • 我没有进一步了解。 Win32_VideoController 看起来很有希望,但这是一个小问题,所以我暂时搁置了它。

标签: c++ winapi


【解决方案1】:

我能想到三种方法:

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

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

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

【讨论】:

  • 不错的选择。你能告诉我如果我使用 C++ WMI-ACPI 接口(Win32_VideoController)实现,那么我如何获得实例数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多