Как вы можете использовать адаптер дисплея для определенного монитора в Windows?
На 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 ответ
Я могу думать о трех подходах:
EnumDisplayDevices
в документации упоминается, чтоdwFlags
Аргумент может использоваться для получения идентификатора устройства, который можно использовать с функциями SetupAPI. Этот API предоставляет целый ряд функций для получения информации об устройстве. Так что, возможно, вы можете получить идентификатор устройства отEnumDisplayDevices
вставьте это в какую-нибудь функцию SetupAPI, чтобы получить структуру устройства монитора, и получите оттуда идентификатор устройства адаптера дисплея.Вы, вероятно, можете использовать
Win32_VideoController
Класс через WMI, чтобы получить информацию об адаптере дисплея.Я могу представить, что некоторые DirectX API доступны для получения информации об установленном графическом оборудовании.