У меня подключено несколько мониторов к машине: 2 из них подключены к внешнему видеоадаптеру, 2 — к внутреннему видеочипу.
Мне нужно знать, какие мониторы подключены к внешнему видеоадаптеру, как это узнать?
Я смотрел в сторону EnumDisplayDevices и я вижу что DISPLAY_DEVICE структура имеет DISPLAY_DEVICE_PRIMARY_DEVICE
флаг, который может показать мне, на каком видео-устройстве находится основной экран. Но этого недостаточно для решения всей задачи.
ОБНОВИТЬ:
я пробовал EnumDisplayDevices
и в его DISPLAY_DEVICE
объект есть поле DeviceString
,
DISPLAY_DEVICE DispDev;
ZeroMemory(&DispDev, sizeof(DispDev));
DispDev.cb = sizeof(DispDev);
DWORD nDeviceIndex = 0;
EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0);
// DispDev.DeviceString now is what I need
Он состоит из названия видеоадаптера, например Intel(R) HD Graphics 4000
,
Но имена могут быть разными, как разделить интегрированное видео и внешнее видео
Нет никакого способа узнать, какая видеокарта является внутренней или внешней, так как эта концепция отсутствует в Windows. Вы можете вывести его из названия, но это, вероятно, перестанет работать со следующей схемой генерации / именования графических карт от факториста.
Единственное, что вы можете сделать, это предоставить пользователю список с графическими картами и позволить им указать вам, на каком из них они хотели бы работать.
Это также относится к случаю, когда внутренняя видеокарта лучше / быстрее / больше подходит для запуска программного обеспечения.
Других решений пока нет …