Какой интерфейс программирования используется Windows-драйверами для переключения активных дисплеев - PullRequest
2 голосов
/ 31 декабря 2011

У меня есть ноутбук с портом VGA и портом HDMI. Поэтому я могу переключаться между тремя дисплеями с макс. 2 дисплея активны одновременно.

Я попытался найти способ переключения активных дисплеев программно с помощью Windows API или .NET Framework. Но это кажется невозможным. Согласно другим сообщениям на форуме в WWW, это может быть достигнуто только с помощью библиотек, которые принадлежат графической карте, например, «Библиотека дисплея AMD» (ADL) или NVAPI для устройств nVidia.

Но мне интересно, как Windows может предоставить настройки для переключения мониторов в настройках системы, хотя здесь нет интерфейса программирования. Windows также использует ADL / NVAPI?

Редактировать

Как указала Дина в комментариях, вероятно, нет документированного API для переключения активных дисплеев. Как разработчики драйверов дисплея могут знать, как разрабатывать свои драйверы? С какой стати нельзя делать такие вещи доступными для общественности?

1 Ответ

2 голосов
/ 26 февраля 2012

Вы можете сделать это, используя EnumDisplayDevices и ChangeDisplaySettingsEx, пропуская CDS_SET_PRIMARY, чтобы выбрать монитор, который вы хотите использовать.Предоставляет ли это лучший интерфейс, я не знаю.В противном случае вам нужно было бы покопаться в документах WDDM на нескольких мониторах, перечисленных здесь , IViewHelper COM-документах или в пользовательском режиме API конфигурации дисплея выставленопо D3D.

Но мне интересно, как Windows может предоставить настройки для переключения мониторов в настройках системы, хотя нет интерфейса программирования

Следует отметить, чтов Windows драйверы дисплея должны предоставлять определенные функции для реализации низкоуровневого API для ядра Windows, что позволяет ядру легко выполнять такие задачи.

Как разработчики драйверов дисплея могут знатькак разрабатывать свои драйверы?Что может быть причиной для того, чтобы не делать такие вещи общедоступными?

У них были бы специальные DDK, доступные для них * (здесь [ XDDM | WDDM ]документы MSDN по написанию драйверов дисплея).API-интерфейс, необходимый для легкого обмена выводом на монитор, вероятно, не является общедоступным, потому что он нужен очень немногим, поэтому они предпочитают тратить свое время и деньги на исправление ошибок в часто используемых разделах.

*Я бы предположил, что хотя в общедоступном DDK есть несколько древних примеров из 3dlabs для реализации драйверов дисплея, а онлайн-документы довольно полны, но написание полноценного драйвера дисплея - задача major , и, скорее всего,нужна прямая поддержка со стороны MS, которая, вероятно, потребует от вас ISV-поставщика MS или аппаратного партнера.

...