在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);
}
我可以获取显示器本身的设备名称,但不能获取它们所连接的适配器!
答案 0 :(得分:3)
我可以想到三种方法:
EnumDisplayDevices
文档提到dwFlags
参数可用于获取可与SetupAPI functions一起使用的设备ID。该API为get device information提供了一系列功能。因此,您可以从EnumDisplayDevices
获取设备ID,将其粘贴到某些SetupAPI函数中以获取监视器设备结构,并从那里获取显示适配器设备ID。
您可以通过WMI使用Win32_VideoController
类来获取显示适配器信息。
我可以想象一些DirectX API可用于获取有关已安装图形硬件的信息。