2011-10-17 32 views
1

在Mac上,我可以使用以下方法来打印出用于特定显示器适配器:如何在Windows中获得用于特定显示器的显示适配器?

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

出于好奇(因为您刚刚接受了我的回答):您选择了哪条路线(如果有的话)? – 2011-10-18 13:12:46

+0

我没有得到任何进一步的。 Win32_VideoController看起来很有前途,但这是一个小问题,所以我暂时离开了它。 – fredley 2011-10-18 13:19:42

回答

3

我能想到的三种方法:

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

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

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

相关问题