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.
Il parametro Flags può anche essere or'ed bit per bit con zero o più dei valori seguenti.
[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 |
---|---|
|
Funzione completata. |
|
La combinazione di parametri e flag specificati non è valida. |
|
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. |
|
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. |
|
Si è verificato un errore non specificato. |
|
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_PATH_SOURCE_INFO