Какой программный интерфейс используется драйверами windows для переключения активных дисплеев

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

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

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

Изменить

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


person fishbone    schedule 31.12.2011    source источник
comment
Windows поддерживает любые видеоадаптеры, предоставляемые драйверами. Если он показывает только 2, то это проблема конкретного драйвера. В самой Windows нет активного ограничения на 2 дисплея.   -  person Deanna    schedule 31.12.2011
comment
@Deanna Вопрос больше о том, как Windows может добиться этого, если нет интерфейса (и если есть интерфейс, где я могу его найти / как его использовать). Активный означает, что вы можете видеть графику на двух дисплеях одновременно (мой графический процессор делает это ограничение)   -  person fishbone    schedule 15.02.2012
comment
Винда так может или дело в драйвере? Как я уже сказал, в Windows нет такого ограничения на количество активных. Кроме того, тот факт, что сама Windows делает это, не означает, что существует общедоступный документированный API.   -  person Deanna    schedule 23.02.2012
comment
Да, я думаю, это водитель. У меня нет проблем с этим ограничением! Общедоступный документированный API — моя проблема.   -  person fishbone    schedule 26.02.2012
comment
Пожалуйста, сделайте свой заголовок описывающим вопрос   -  person Lightness Races in Orbit    schedule 26.02.2012


Ответы (1)


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

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

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

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

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

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

person Necrolis    schedule 26.02.2012