окна: получить количество мониторов, в том числе отключенных - PullRequest
2 голосов
/ 28 января 2011

EnumDisplayMonitors перечисляет все мониторы, которые в данный момент активированы. Однако, похоже, что он не возвращает отключенные (то есть те, которые «расширили мой рабочий стол на этот монитор» не проверены). Как я могу получить счет, в том числе тех, кто отключен?

Ответы [ 2 ]

1 голос
/ 28 января 2011

Хорошо, сначала вам нужно создать контекст устройства:

http://msdn.microsoft.com/en-us/library/dd183490(v=VS.85).aspx Следующий код даст вам все мониторы:

CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL)

Затем вы вызываете EnumDisplayDevices для DeviceContext, у которого будет указатель на структуру DISPLAY_DEVICE, которая содержит информацию о настройках устройства отображения . http://msdn.microsoft.com/en-us/library/dd162609(v=VS.85).aspx

По MSDN:

Чтобы запросить все устройства отображения в текущем сеансе, вызовите эту функцию в цикле, начиная с iDevNum, установленной в 0, и увеличивая iDevNum, пока не произойдет сбой функции. Чтобы выбрать все устройства отображения на рабочем столе, используйте только те устройства отображения, которые имеют флаг DISPLAY_DEVICE_ATTACHED_TO_DESKTOP в структуре DISPLAY_DEVICE.

Чтобы получить информацию об адаптере дисплея, вызовите EnumDisplayDevices с lpDevice, установленным в NULL. Например, DISPLAY_DEVICE.DeviceString содержит имя адаптера.

Чтобы получить информацию на мониторе дисплея, сначала вызовите EnumDisplayDevices с lpDevice, установленным в NULL. Затем вызовите EnumDisplayDevices с lpDevice, для которого установлено DISPLAY_DEVICE.DeviceName, от первого вызова EnumDisplayDevices и с iDevNum, установленным в ноль. Тогда DISPLAY_DEVICE.DeviceString - это имя монитора.

Чтобы запросить все устройства мониторинга, связанные с адаптером, вызовите EnumDisplayDevices в цикле с lpDevice, для которого задано имя адаптера, iDevNum - с 0, а iDevNum - с приращением до сбоя функции. Обратите внимание, что DISPLAY_DEVICE.DeviceName изменяется при каждом вызове для получения информации о мониторе, поэтому необходимо сохранить имя адаптера. Функция не работает, если больше нет мониторов для адаптера.

Я не программист на C ++, однако мне приходилось кодировать некоторые вещи для отображения в далеком прошлом, и я просто пытался помочь с тем, что я помню. Я немного заржавел на WINAPI.

0 голосов
/ 28 января 2011

Проверяли ли вы функции дисплея монитора?

Я почти уверен, что флаг MONITORINFOF_PRIMARY структуры MONITORINFO указывает, какой монитор является основным монитором.Любой монитор, который имеет структуру MONITORINFO или MONITORINFOEX, является «полезным» монитором.

http://msdn.microsoft.com/en-us/library/dd145065(v=VS.85).aspx

Насколько доступны мониторы, эта ссылка позволяет проверить следующие:
ПолучитьИнформация о мониторе: http://msdn.microsoft.com/en-us/library/dd144942(v=VS.85).aspx
Устройства отображения Enum: http://msdn.microsoft.com/en-us/library/dd162609(VS.85).aspx
Структура устройства отображения: http://msdn.microsoft.com/en-us/library/dd183569(v=VS.85).aspx

Структура устройства отображения имеет флаг «DISPLAY_DEVICE_ACTIVE», который указывает, активно ли устройство.

...