Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Der Flags-Parameter kann auch bitweise OR'ed mit null oder mehr der folgenden Werte sein.
[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 |
|---|---|
|
Die Funktion wurde erfolgreich ausgeführt. |
|
Die Kombination aus Parametern und Flags, die angegeben werden, ist ungültig. |
|
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. |
|
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. |
|
Ein nicht angegebener Fehler ist aufgetreten. |
|
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_PATH_SOURCE_INFO