QueryDisplayConfig-Funktion (winuser.h)

Die QueryDisplayConfig-Funktion ruft Informationen zu allen möglichen Anzeigepfaden für alle Anzeigegeräte oder Ansichten in der aktuellen Einstellung ab.

Syntax

LONG QueryDisplayConfig(
  [in]            UINT32                    flags,
  [in, out]       UINT32                    *numPathArrayElements,
  [out]           DISPLAYCONFIG_PATH_INFO   *pathArray,
  [in, out]       UINT32                    *numModeInfoArrayElements,
  [out]           DISPLAYCONFIG_MODE_INFO   *modeInfoArray,
  [out, optional] DISPLAYCONFIG_TOPOLOGY_ID *currentTopologyId
);

Parameter

[in] flags

Der Typ der abzurufenden Informationen. Der Wert für den Flags-Parameter muss einen der folgenden Werte verwenden.

Wert Bedeutung
QDC_ALL_PATHS
0x00000001
Gibt alle möglichen Pfadkombinationen von Quellen zu Zielen zurück.

Note

Bei temporären Modi bedeutet die Einstellung QDC_ALL_PATHS, dass die zurückgegebenen Modusdaten möglicherweise nicht mit dem in der Persistenzdatenbank gespeicherten Modus übereinstimmen.

Note

Diese Kennzeichnung kann sehr teuer zu berechnen sein. Es wird nicht empfohlen, dieses Flag zu verwenden, es sei denn, der Aufrufer versucht, den Satz gültiger Verbindungen zwischen Quellen und Zielen zu ermitteln.

QDC_ONLY_ACTIVE_PATHS
0x00000002
Gibt derzeit nur aktive Pfade zurück.

Note

Bei temporären Modi bedeutet die Einstellung QDC_ONLY_ACTIVE_PATHS, dass die zurückgegebenen Modusdaten möglicherweise nicht mit dem in der Persistenzdatenbank gespeicherten Modus übereinstimmen.

QDC_DATABASE_CURRENT
0x00000004
Gibt aktive Pfade zurück, wie in der CCD-Datenbank für die aktuell verbundenen Displays definiert.

Der Flags-Parameter kann auch bitweise OR'ed mit null oder mehr der folgenden Werte sein.

Wert Bedeutung
QDC_VIRTUAL_MODE_AWARE
0x00000010
Dieses Kennzeichen sollte bitweise oder mit anderen Flags versehen sein, um anzugeben, dass der Anrufer die Unterstützung für den virtuellen Modus kennt.

Wird ab Windows 10 unterstützt.

QDC_INCLUDE_HMD
0x00000020
Dieses Flag sollte bitweise oder mit QDC_ONLY_ACTIVE_PATHS gekennzeichnet sein, um anzugeben, dass der Aufrufer in die Liste der aktiven Pfade head-mounted displays (HMDs) einschließen möchte. Weitere Informationen finden Sie in den Anmerkungen.

Wird ab Windows 10 1703 Creators Update unterstützt.

QDC_VIRTUAL_REFRESH_RATE_AWARE
0x00000040
Dieses Kennzeichen sollte bitweise oder mit anderen Flags versehen sein, um anzugeben, dass der Aufrufer die Unterstützung der virtuellen Aktualisierungsrate kennt.

Wird ab Windows 11 unterstützt.

[in, out] numPathArrayElements

Zeiger auf eine Variable, die die Anzahl der Elemente in pathArray enthält. Dieser Parameter kann nicht NULL-werden. Wenn QueryDisplayConfig ERROR_SUCCESS zurückgibt, wird numPathArrayElements mit der Anzahl gültiger Einträge in pathArray aktualisiert.

[out] pathArray

Zeigen Sie auf eine Variable, die ein Array von DISPLAYCONFIG_PATH_INFO Elementen enthält. Jedes Element in pathArray beschreibt einen einzelnen Pfad von einer Quelle zu einem Ziel. Die Quell- und Zielmodusinformationsindizes sind nur in Kombination mit den modeInfoArray-Tabellen gültig, die gleichzeitig für die API zurückgegeben werden. Dieser Parameter kann nicht NULL-werden. PathArray wird immer in der Pfadprioritätsreihenfolge zurückgegeben. Weitere Informationen zur Reihenfolge der Pfadpriorität finden Sie unter Pfadprioritätsreihenfolge.

[in, out] numModeInfoArrayElements

Zeigen Sie auf eine Variable, die die Zahl im Element der Modusinformationstabelle angibt. Dieser Parameter kann nicht NULL-werden. Wenn QueryDisplayConfig ERROR_SUCCESS zurückgibt, wird numModeInfoArrayElements mit der Anzahl gültiger Einträge in modeInfoArray aktualisiert.

[out] modeInfoArray

Zeigen Sie auf eine Variable, die ein Array von DISPLAYCONFIG_MODE_INFO Elementen enthält. Dieser Parameter kann nicht NULL-werden.

[out, optional] currentTopologyId

Zeiger auf eine Variable, die den Bezeichner der derzeit aktiven Topologie in der CCD-Datenbank empfängt. Eine Liste der möglichen Werte finden Sie im DISPLAYCONFIG_TOPOLOGY_ID Aufzählungstyp.

Der parameter currentTopologyId wird nur festgelegt, wenn der Wert des Flags-Parameters QDC_DATABASE_CURRENT wird.

Wenn der Wert des Flags-Parameters auf QDC_DATABASE_CURRENT festgelegt ist, darf der Parameter "currentTopologyId " nicht NULL sein. Wenn der Wert des Flags-Parameters nicht auf QDC_DATABASE_CURRENT festgelegt ist, muss der Parameterwert "currentTopologyId " NULL sein.

Rückgabewert

Die Funktion gibt einen der folgenden Rückgabecodes zurück.

Rückgabecode Beschreibung
ERROR_SUCCESS
Die Funktion wurde erfolgreich ausgeführt.
ERROR_INVALID_PARAMETER
Die Kombination aus Parametern und Flags, die angegeben werden, ist ungültig.
ERROR_NOT_SUPPORTED
Das System führt keinen Grafiktreiber aus, der gemäß dem Windows Display Driver Model (WDDM) geschrieben wurde. Die Funktion wird nur auf einem System unterstützt, bei dem ein WDDM-Treiber ausgeführt wird.
ERROR_ACCESS_DENIED
Der Aufrufer hat keinen Zugriff auf die Konsolensitzung. Dieser Fehler tritt auf, wenn der Aufrufvorgang keinen Zugriff auf den aktuellen Desktop hat oder auf einer Remotesitzung ausgeführt wird.
ERROR_GEN_FAILURE
Ein nicht angegebener Fehler ist aufgetreten.
ERROR_INSUFFICIENT_BUFFER
Der angegebene Pfad- und Moduspuffer ist zu klein.

Bemerkungen

Da die GetDisplayConfigBufferSizes-Funktion nur die erforderliche Arraygröße zu einem bestimmten Zeitpunkt bestimmen kann, ist es möglich, dass zwischen Aufrufen von GetDisplayConfigBufferSizes und QueryDisplayConfig die Systemkonfiguration geändert wird und die bereitgestellten Arraygrößen nicht mehr ausreichen, um die neuen Pfaddaten zu speichern. In diesem Fall schlägt QueryDisplayConfig mit ERROR_INSUFFICIENT_BUFFER fehl, und der Aufrufer sollte GetDisplayConfigBufferSizes erneut aufrufen, um die neuen Arraygrößen abzurufen. Der Aufrufer sollte dann die richtige Speichermenge zuordnen.

QueryDisplayConfig gibt Pfade im Pfadarray zurück, das der PathArray-Parameter angibt, sowie die Quell- und Zielmodi im Modusarray, das der parameter modeInfoArray angibt. QueryDisplayConfig gibt immer Pfade in der Pfadprioritätsreihenfolge zurück. Wenn QDC_ALL_PATHS im Flags-Parameter festgelegt ist, gibt QueryDisplayConfig alle inaktiven Pfade nach den aktiven Pfaden zurück.

Vollständige Pfad-, Quellmodus- und Zielmodusinformationen sind für alle aktiven Pfade verfügbar. Die ModeInfoIdx-Member in den DISPLAYCONFIG_PATH_SOURCE_INFO und DISPLAYCONFIG_PATH_TARGET_INFO Strukturen für die Quelle und das Ziel werden für diese aktiven Pfade eingerichtet. Bei inaktiven Pfaden sind die zurückgegebenen Quell- und Zielmodusinformationen nicht verfügbar; Daher werden die Zielinformationen in der Pfadstruktur auf Standardwerte festgelegt, und die Quell- und Zielmodusindizes werden als ungültig markiert. Wenn die aktuellen Verbindungsmonitore einen Eintrag haben, gibt QueryDisplayConfig für Datenbankabfragen vollständige Pfad-, Quell- und Zielmodusinformationen zurück (identisch mit aktiven Pfaden). Wenn die Datenbank jedoch keinen Eintrag enthält, gibt QueryDisplayConfig nur die Pfadinformationen mit den Standardzieldetails zurück (identisch mit inaktiven Pfaden).

Ein Beispiel dafür, wie Sich Quell- und Zielmodusinformationen auf Pfadinformationen beziehen, finden Sie unter "Beziehung zwischen Modusinformationen und Pfadinformationen".

Der Aufrufer kann DisplayConfigGetDeviceInfo verwenden, um zusätzliche Informationen zum Quell- oder Zielgerät abzurufen, z. B. die Monitornamen und den bevorzugten Modus- und Quellgerätenamen.

Wenn ein Ziel zurzeit projiziert wird, weist das StatusFlags-Element der DISPLAYCONFIG_PATH_TARGET_INFO Struktur eine der DISPLAYCONFIG_TARGET_FORCED_XXX Flags auf.

Wenn das QDC_DATABASE_CURRENT Flag im Parameter "Flags " festgelegt ist, gibt QueryDisplayConfig den Topologiebezeichner der aktiven Datenbanktopologie in der Variablen zurück, auf die der parameter currentTopologyId verweist. Wenn das flag QDC_ALL_PATHS oder QDC_ONLY_ACTIVE_PATHS im Parameter "Flags " festgelegt ist, muss der Parameter "currentTopologyId " auf NULL festgelegt werden. andernfalls gibt QueryDisplayConfig ERROR_INVALID_PARAMETER zurück.

Wenn ein Aufrufer QueryDisplayConfig mit dem im Flags-Parameter festgelegten QDC_DATABASE_CURRENT-Flag aufruft, initialisiert QueryDisplayConfig die DISPLAYCONFIG_2DREGION Struktur, die im totalSize-Element der DISPLAYCONFIG_VIDEO_SIGNAL_INFO-Struktur auf Nullen angegeben ist, und schließt DISPLAYCONFIG_2DREGION nicht ab.

Die DEVMODE-Struktur, die von der EnumDisplaySettings Win32-Funktion (in der Windows SDK-Dokumentation beschrieben) zurückgegeben wird, enthält Informationen, die sich sowohl auf den Quell- als auch auf den Zielmodus beziehen. Die CCD-APIs trennen jedoch explizit die Quell- und Zielmoduskomponenten.

Kopfmontierte und spezialisierte Monitore

QueryDisplayConfig und viele andere Win32-Anzeige-APIs verfügen über eingeschränktes Bewusstsein für head-mounted und spezialisierte Monitore, da diese Displays nicht an der Windows Desktopumgebung teilnehmen. Es gibt jedoch Szenarien, in denen es erforderlich ist, die Konnektivität dieser Displays zu verstehen (z. B. Inhaltsschutzszenarien). Für diese eingeschränkten Szenarien (QDC_INCLUDE_HMD | QDC_ONLY_ACTIVE_PATHS) können Sie die Konnektivität von head-mounted Displays ermitteln. Diese Pfade werden mit dem DISPLAYCONFIG_TARGET_IS_HMD Flag im Feld DISPLAYCONFIG_PATH_TARGET_INFO.statusFlags gekennzeichnet. Diese Unterstützung wurde im Windows 10 1703 Creators Update hinzugefügt.

DPI-Virtualisierung

Diese API nimmt nicht an der DPI-Virtualisierung teil. Alle Größen in der DEVMODE-Struktur beziehen sich auf physische Pixel und beziehen sich nicht auf den aufrufenden Kontext.

Beispiele

Im folgenden Beispiel werden aktive Anzeigepfade mit QueryDisplayConfig und GetDisplayConfigBufferSizes aufgelistet und Daten für jeden Pfad mithilfe von DisplayConfigGetDeviceInfo gedruckt.

#include <windows.h>
#include <vector>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    vector<DISPLAYCONFIG_PATH_INFO> paths;
    vector<DISPLAYCONFIG_MODE_INFO> modes;
    UINT32 flags = QDC_ONLY_ACTIVE_PATHS | QDC_VIRTUAL_MODE_AWARE;
    LONG result = ERROR_SUCCESS;

    do
    {
        // Determine how many path and mode structures to allocate
        UINT32 pathCount, modeCount;
        result = GetDisplayConfigBufferSizes(flags, &pathCount, &modeCount);

        if (result != ERROR_SUCCESS)
        {
            return HRESULT_FROM_WIN32(result);
        }

        // Allocate the path and mode arrays
        paths.resize(pathCount);
        modes.resize(modeCount);

        // Get all active paths and their modes
        result = QueryDisplayConfig(flags, &pathCount, paths.data(), &modeCount, modes.data(), nullptr);

        // The function may have returned fewer paths/modes than estimated
        paths.resize(pathCount);
        modes.resize(modeCount);

        // It's possible that between the call to GetDisplayConfigBufferSizes and QueryDisplayConfig
        // that the display state changed, so loop on the case of ERROR_INSUFFICIENT_BUFFER.
    } while (result == ERROR_INSUFFICIENT_BUFFER);

    if (result != ERROR_SUCCESS)
    {
        return HRESULT_FROM_WIN32(result);
    }

    // For each active path
    for (auto& path : paths)
    {
        // Find the target (monitor) friendly name
        DISPLAYCONFIG_TARGET_DEVICE_NAME targetName = {};
        targetName.header.adapterId = path.targetInfo.adapterId;
        targetName.header.id = path.targetInfo.id;
        targetName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
        targetName.header.size = sizeof(targetName);
        result = DisplayConfigGetDeviceInfo(&targetName.header);

        if (result != ERROR_SUCCESS)
        {
            return HRESULT_FROM_WIN32(result);
        }

        // Find the adapter device name
        DISPLAYCONFIG_ADAPTER_NAME adapterName = {};
        adapterName.header.adapterId = path.targetInfo.adapterId;
        adapterName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME;
        adapterName.header.size = sizeof(adapterName);

        result = DisplayConfigGetDeviceInfo(&adapterName.header);

        if (result != ERROR_SUCCESS)
        {
            return HRESULT_FROM_WIN32(result);
        }

        wcout
            << L"Monitor with name "
            << (targetName.flags.friendlyNameFromEdid ? targetName.monitorFriendlyDeviceName : L"Unknown")
            << L" is connected to adapter "
            << adapterName.adapterDevicePath
            << L" on target "
            << path.targetInfo.id
            << L"\n";
    }
}

Requirements

Anforderung Wert
Mindestens unterstützter Client Verfügbar in Windows 7 und höheren Versionen der Windows Betriebssysteme.
Zielplattform Universal
Header winuser.h (enthalten Windows.h)
Bibliothek User32.lib; OneCoreUAP.lib auf Windows 10
DLL User32.dll
API-Satz ext-ms-win-ntuser-sysparams-ext-l1-1-1 (eingeführt in Windows 10, Version 10.0.14393)

Siehe auch

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

DISPLAYCONFIG_TOPOLOGY_ID

DisplayConfigGetDeviceInfo

SetDisplayConfig