Condividi tramite


Funzione QueryDisplayConfig (winuser.h)

La funzione QueryDisplayConfig recupera informazioni su tutti i percorsi di visualizzazione possibili per tutti i dispositivi visualizzati o le visualizzazioni nell'impostazione corrente.

Sintassi

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
);

Parametri

[in] flags

Tipo di informazioni da recuperare. Il valore per il parametro Flags deve usare uno dei valori seguenti.

Valore Significato
QDC_ALL_PATHS
0x00000001
Restituisce tutte le possibili combinazioni di percorsi delle origini a destinazioni.

Nota

In caso di modalità temporanee, l'impostazione QDC_ALL_PATHS indica che i dati in modalità restituiti potrebbero non essere uguali a quello archiviato nel database di persistenza.

Nota

Questo flag può essere molto costoso da calcolare. Non è consigliabile usare questo flag a meno che il chiamante non stia tentando di determinare il set di connessioni valide tra origini e destinazioni.

QDC_ONLY_ACTIVE_PATHS
0x00000002
Restituisce solo percorsi attivi.

Nota

Nel caso di qualsiasi modalità temporanea, l'impostazione QDC_ONLY_ACTIVE_PATHS indica che i dati in modalità restituiti potrebbero non essere uguali a quello archiviato nel database di persistenza.

QDC_DATABASE_CURRENT
0x00000004
Restituisce percorsi attivi come definito nel database CCD per la visualizzazione attualmente connessa.

Il parametro Flags può anche essere or'ed bit per bit con zero o più dei valori seguenti.

Valore Significato
QDC_VIRTUAL_MODE_AWARE
0x00000010
Questo flag deve essere or bit per bit con altri flag per indicare che il chiamante è a conoscenza del supporto della modalità virtuale.

Supportato a partire da Windows 10.

QDC_INCLUDE_HMD
0x00000020
Questo flag deve essere or bit per bit con QDC_ONLY_ACTIVE_PATHS per indicare che il chiamante vuole includere i display a capo (HMD) nell'elenco dei percorsi attivi. Per ulteriori informazioni, vedere la sezione Osservazioni.

Supportato a partire da Windows 10 1703 Creators Update.

QDC_VIRTUAL_REFRESH_RATE_AWARE
0x00000040
Questo flag deve essere or bit per bit con altri flag per indicare che il chiamante è a conoscenza del supporto della frequenza di aggiornamento virtuale.

Supportato a partire da Windows 11.

[in, out] numPathArrayElements

Puntatore a una variabile contenente il numero di elementi in pPathInfoArray. Questo parametro non può essere NULL. Se QueryDisplayConfig restituisce ERROR_SUCCESS, pNumPathInfoElements viene aggiornato con il numero di voci valide in pPathInfoArray.

[out] pathArray

Puntatore a una variabile contenente una matrice di elementi DISPLAYCONFIG_PATH_INFO . Ogni elemento in pPathInfoArray descrive un singolo percorso da un'origine a una destinazione. Gli indici di informazioni sulla modalità di origine e di destinazione sono validi solo in combinazione con le tabelle pmodeInfoArray restituite contemporaneamente per l'API. Questo parametro non può essere NULL. PPathInfoArray viene sempre restituito nell'ordine di priorità del percorso. Per altre informazioni sull'ordine di priorità del percorso, vedere Ordine di priorità percorso.

[in, out] numModeInfoArrayElements

Puntatore a una variabile che specifica il numero nell'elemento della tabella delle informazioni sulla modalità. Questo parametro non può essere NULL. Se QueryDisplayConfig restituisce ERROR_SUCCESS, pNumModeInfoArrayElements viene aggiornato con il numero di voci valide in pModeInfoArray.

[out] modeInfoArray

Puntatore a una variabile contenente una matrice di elementi DISPLAYCONFIG_MODE_INFO . Questo parametro non può essere NULL.

[out, optional] currentTopologyId

Puntatore a una variabile che riceve l'identificatore della topologia attualmente attiva nel database CCD. Per un elenco di valori possibili, vedere il DISPLAYCONFIG_TOPOLOGY_ID tipo enumerato.

Il parametro pCurrentTopologyId viene impostato solo quando il valore del parametro Flags è QDC_DATABASE_CURRENT.

Se il valore del parametro Flags è impostato su QDC_DATABASE_CURRENT, il parametro pCurrentTopologyId non deve essere NULL. Se il valore del parametro Flags non è impostato su QDC_DATABASE_CURRENT, il valore del parametro pCurrentTopologyId deve essere NULL.

Valore restituito

La funzione restituisce uno dei codici restituiti seguenti.

Codice restituito Descrizione
ERROR_SUCCESS
Funzione completata.
ERROR_INVALID_PARAMETER
La combinazione di parametri e flag specificati non è valida.
ERROR_NOT_SUPPORTED
Il sistema non esegue un driver grafico scritto in base al modello wdDM (Display Driver Model) di Windows. La funzione è supportata solo in un sistema con un driver WDDM in esecuzione.
ERROR_ACCESS_DENIED
Il chiamante non ha accesso alla sessione della console. Questo errore si verifica se il processo di chiamata non ha accesso al desktop corrente o è in esecuzione in una sessione remota.
ERROR_GEN_FAILURE
Si è verificato un errore non specificato.
ERROR_INSUFFICIENT_BUFFER
Il percorso e il buffer in modalità forniti sono troppo piccoli.

Commenti

Poiché la funzione GetDisplayConfigBufferSizes può determinare solo le dimensioni della matrice necessarie in un determinato momento, è possibile che tra le chiamate a GetDisplayConfigBufferSizes e QueryDisplayConfig la configurazione del sistema cambierà e le dimensioni della matrice specificate non saranno più sufficienti per archiviare i nuovi dati del percorso. In questo caso QueryDisplayConfig ha esito negativo con ERROR_INSUFFICIENT_BUFFER e il chiamante deve chiamare nuovamente GetDisplayConfigBufferSizes per ottenere le nuove dimensioni della matrice. Il chiamante deve quindi allocare la quantità corretta di memoria.

QueryDisplayConfig restituisce i percorsi nella matrice di percorso specificata dal parametro pPathInfoArray e dalle modalità di origine e destinazione nella matrice in modalità specificata dal parametro pModeInfoArray . QueryDisplayConfig restituisce sempre i percorsi nell'ordine di priorità del percorso. Se QDC_ALL_PATHS è impostato nel parametro Flags , QueryDisplayConfig restituisce tutti i percorsi inattivi dopo i percorsi attivi.

Il percorso completo, la modalità di origine e le informazioni sulla modalità di destinazione sono disponibili per tutti i percorsi attivi. I membri ModeInfoIdx nelle strutture DISPLAYCONFIG_PATH_SOURCE_INFO e DISPLAYCONFIG_PATH_TARGET_INFO per l'origine e la destinazione vengono configurati per questi percorsi attivi. Per i percorsi inattivi, le informazioni sulla modalità di origine e destinazione restituite non sono disponibili; pertanto, le informazioni di destinazione nella struttura del percorso sono impostate su valori predefiniti e gli indici della modalità di origine e di destinazione sono contrassegnati come non validi. Per le query di database, se i monitoraggi di connessione correnti hanno una voce, QueryDisplayConfig restituisce informazioni complete sul percorso, sulla modalità di origine e sulla modalità di destinazione (come per i percorsi attivi). Tuttavia, se il database non dispone di una voce, QueryDisplayConfig restituisce solo le informazioni sul percorso con i dettagli di destinazione predefiniti (come per i percorsi inattivi).

Per un esempio del modo in cui le informazioni sulla modalità di origine e di destinazione sono correlate alle informazioni sul percorso, vedere Relazione delle informazioni sulla modalità a Informazioni sul percorso.

Il chiamante può usare DisplayConfigGetDeviceInfo per ottenere informazioni aggiuntive sul dispositivo di origine o di destinazione, ad esempio i nomi di monitoraggio e monitorare la modalità preferita e il nome del dispositivo di origine.

Se una destinazione è attualmente in fase di progetto, il membro statusFlags della struttura DISPLAYCONFIG_PATH_TARGET_INFO ha uno dei flag DISPLAYCONFIG_TARGET_FORCED_XXX impostato.

Se il flag QDC_DATABASE_CURRENT è impostato nel parametro Flags , QueryDisplayConfig restituisce l'identificatore di topologia del database attivo nella variabile a cui punta il parametro pCurrentTopologyId . Se il flag QDC_ALL_PATHS o QDC_ONLY_ACTIVE_PATHS è impostato nel parametro Flags , il parametro pCurrentTopologyId deve essere impostato su NULL; in caso contrario, QueryDisplayConfig restituisce ERROR_INVALID_PARAMETER.

Se un chiamante chiama QueryDisplayConfig con il flag QDC_DATABASE_CURRENT impostato nel parametro Flags, QueryDisplayConfig inizializza la struttura diDISPLAYCONFIG_2DREGION specificata nel membro totalSize della struttura DISPLAYCONFIG_VIDEO_SIGNAL_INFO su zero e non completa DISPLAYCONFIG_2DREGION.

La struttura DEVMODE restituita dalla funzione EnumDisplaySettings Win32 (descritta nella documentazione di Windows SDK) contiene informazioni correlate alle modalità di origine e di destinazione. Tuttavia, le API CCD separano in modo esplicito i componenti della modalità di origine e di destinazione.

Monitor a testa montati e specializzati

QueryDisplayConfig e molte altre API di visualizzazione Win32 hanno una conoscenza limitata dei monitor head montati e specializzati, poiché tali display non partecipano all'ambiente desktop di Windows. Tuttavia, esistono scenari in cui è necessario comprendere la connettività di questi schermi ,ad esempio scenari di protezione del contenuto. Per questi scenari limitati, (QDC_INCLUDE_HMD | QDC_ONLY_ACTIVE_PATHS) è possibile usare per individuare la connettività dei display montati a testa. Questi percorsi verranno contrassegnati con il flag DISPLAYCONFIG_TARGET_IS_HMD nel campo DISPLAYCONFIG_PATH_TARGET_INFO.statusFlags . Questo supporto è stato aggiunto nel Windows 10 1703 Creators Update.

Virtualizzazione DPI

Questa API non partecipa alla virtualizzazione DPI. Tutte le dimensioni della struttura DEVMODE sono in termini di pixel fisici e non sono correlate al contesto chiamante.

Esempio

L'esempio seguente enumera i percorsi di visualizzazione attivi con QueryDisplayConfig e GetDisplayConfigBufferSizes e stampa i dati per ogni percorso usando DisplayConfigGetDeviceInfo.

#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";
    }
}

Requisiti

   
Client minimo supportato Disponibile in Windows 7 e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione winuser.h (include Windows.h)
Libreria User32.lib; OneCoreUAP.lib in Windows 10
DLL User32.dll
Set di API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introdotto in Windows 10, versione 10.0.14393)

Vedi anche

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

DISPLAYCONFIG_TOPOLOGY_ID

DisplayConfigGetDeviceInfo

SetDisplayConfig