Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La función QueryDisplayConfig recupera información sobre todas las rutas de acceso de visualización posibles para todos los dispositivos de visualización, o vistas, en la configuración actual.
Sintaxis
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
);
Parameters
[in] flags
Tipo de información que se va a recuperar. El valor del parámetro flags debe usar uno de los valores siguientes.
El parámetro flags también puede ser OR bit a bit con cero o más de los valores siguientes.
[in, out] numPathArrayElements
Puntero a una variable que contiene el número de elementos de pathArray. Este parámetro no puede ser NULL. Si QueryDisplayConfig devuelve ERROR_SUCCESS, numPathArrayElements se actualiza con el número de entradas válidas en pathArray.
[out] pathArray
Puntero a una variable que contiene una matriz de elementos DISPLAYCONFIG_PATH_INFO . Cada elemento de pathArray describe una única ruta de acceso de un origen a un destino. Los índices de información del modo de origen y destino solo son válidos en combinación con las tablas modeInfoArray que se devuelven para la API al mismo tiempo. Este parámetro no puede ser NULL. PathArray siempre se devuelve en el orden de prioridad de la ruta de acceso. Para obtener más información sobre el orden de prioridad de ruta de acceso, consulte Orden de prioridad de ruta de acceso.
[in, out] numModeInfoArrayElements
Puntero a una variable que especifica el número en el elemento de la tabla de información del modo. Este parámetro no puede ser NULL. Si QueryDisplayConfig devuelve ERROR_SUCCESS, numModeInfoArrayElements se actualiza con el número de entradas válidas en modeInfoArray.
[out] modeInfoArray
Puntero a una variable que contiene una matriz de DISPLAYCONFIG_MODE_INFO elementos. Este parámetro no puede ser NULL.
[out, optional] currentTopologyId
Puntero a una variable que recibe el identificador de la topología activa actualmente en la base de datos CCD. Para obtener una lista de los valores posibles, consulte el DISPLAYCONFIG_TOPOLOGY_ID tipo enumerado.
El parámetro currentTopologyId solo se establece cuando el valor del parámetro flags es QDC_DATABASE_CURRENT.
Si el valor del parámetro flags se establece en QDC_DATABASE_CURRENT, el parámetro currentTopologyId no debe ser NULL. Si el valor del parámetro flags no está establecido en QDC_DATABASE_CURRENT, el valor del parámetro currentTopologyId debe ser NULL.
Valor devuelto
La función devuelve uno de los siguientes códigos de retorno.
| Código de retorno | Descripción |
|---|---|
|
La función se ha realizado correctamente. |
|
La combinación de parámetros y marcas que se especifican no es válida. |
|
El sistema no ejecuta un controlador gráfico escrito según el modelo de controlador de pantalla (WDDM) Windows . La función solo se admite en un sistema con un controlador WDDM en ejecución. |
|
El autor de la llamada no tiene acceso a la sesión de consola. Este error se produce si el proceso de llamada no tiene acceso al escritorio actual o se ejecuta en una sesión remota. |
|
Error no especificado. |
|
La ruta de acceso y el búfer de modo proporcionados son demasiado pequeñas. |
Observaciones
Dado que la función GetDisplayConfigBufferSizes solo puede determinar el tamaño de matriz necesario en un momento determinado, es posible que entre las llamadas a GetDisplayConfigBufferSizes y QueryDisplayConfig , la configuración del sistema cambiará y los tamaños de matriz proporcionados ya no serán suficientes para almacenar los nuevos datos de ruta de acceso. En esta situación, QueryDisplayConfig produce un error con ERROR_INSUFFICIENT_BUFFER y el autor de la llamada debe llamar a GetDisplayConfigBufferSizes de nuevo para obtener los nuevos tamaños de matriz. A continuación, el autor de la llamada debe asignar la cantidad correcta de memoria.
QueryDisplayConfig devuelve rutas de acceso en la matriz de rutas de acceso que especifica el parámetro pathArray y los modos de origen y destino en la matriz de modo que especifica el parámetro modeInfoArray . QueryDisplayConfig siempre devuelve rutas de acceso en orden de prioridad de ruta de acceso. Si QDC_ALL_PATHS se establece en el parámetro flags, QueryDisplayConfig devuelve todas las rutas de acceso inactivas después de las rutas de acceso activas.
La información de ruta de acceso completa, modo de origen y modo de destino está disponible para todas las rutas de acceso activas. Los miembros ModeInfoIdx de las estructuras DISPLAYCONFIG_PATH_SOURCE_INFO y DISPLAYCONFIG_PATH_TARGET_INFO para el origen y el destino están configurados para estas rutas de acceso activas. Para las rutas de acceso inactivas, la información de modo de origen y destino devuelta no está disponible; por lo tanto, la información de destino de la estructura de ruta de acceso se establece en valores predeterminados y los índices del modo de origen y destino se marcan como no válidos. En el caso de las consultas de base de datos, si los monitores de conexión actuales tienen una entrada, QueryDisplayConfig devuelve la ruta de acceso completa, el modo de origen y la información del modo de destino (igual que para las rutas de acceso activas). Sin embargo, si la base de datos no tiene una entrada, QueryDisplayConfig devuelve solo la información de ruta de acceso con los detalles de destino predeterminados (igual que para las rutas de acceso inactivas).
Para obtener un ejemplo de cómo se relaciona la información del modo de origen y de destino con la información de ruta de acceso, vea Relación de información de modo a información de ruta de acceso.
El autor de la llamada puede usar DisplayConfigGetDeviceInfo para obtener información adicional sobre el dispositivo de origen o de destino, por ejemplo, los nombres de monitor y el modo preferido del monitor y el nombre del dispositivo de origen.
Si actualmente se fuerza un destino, el miembro statusFlags de la estructura DISPLAYCONFIG_PATH_TARGET_INFO tiene una de las marcas de DISPLAYCONFIG_TARGET_FORCED_XXX establecidas.
Si la marca QDC_DATABASE_CURRENT está establecida en el parámetro Flags , QueryDisplayConfig devuelve el identificador de topología de la topología de base de datos activa en la variable a la que apunta el parámetro currentTopologyId . Si la marca QDC_ALL_PATHS o QDC_ONLY_ACTIVE_PATHS está establecida en el parámetro Flags , el parámetro currentTopologyId debe establecerse en NULL; De lo contrario, QueryDisplayConfig devuelve ERROR_INVALID_PARAMETER.
Si un llamador llama a QueryDisplayConfig con la marca QDC_DATABASE_CURRENT establecida en el parámetro flags , QueryDisplayConfig inicializa la estructura DISPLAYCONFIG_2DREGION especificada en el miembro totalSize de la estructura DISPLAYCONFIG_VIDEO_SIGNAL_INFO en ceros y no completa DISPLAYCONFIG_2DREGION.
La estructura DEVMODE que devuelve la EnumDisplaySettings función Win32 (descrita en la documentación del SDK de Windows) contiene información relacionada con los modos de origen y destino. Sin embargo, las API de CCD separan explícitamente los componentes del modo de origen y de destino.
Monitores montados en la cabeza y especializados
QueryDisplayConfig y muchas otras API de visualización de Win32 tienen un conocimiento limitado de monitores especializados y montados en la cabeza, ya que esas pantallas no participan en el entorno de escritorio de Windows. Sin embargo, hay escenarios en los que es necesario comprender la conectividad de estas pantallas (por ejemplo, escenarios de protección de contenido). En estos escenarios limitados, (QDC_INCLUDE_HMD | QDC_ONLY_ACTIVE_PATHS) se puede usar para detectar la conectividad de las pantallas montadas en la cabeza. Estas rutas de acceso se marcarán con la marca DISPLAYCONFIG_TARGET_IS_HMD en el campo DISPLAYCONFIG_PATH_TARGET_INFO.statusFlags . Esta compatibilidad se agregó en Windows 10 1703 Creators Update.
Virtualización de PPP
Esta API no participa en la virtualización de PPP. Todos los tamaños de la estructura DEVMODE se encuentran en términos de píxeles físicos y no están relacionados con el contexto de llamada.
Examples
En el ejemplo siguiente se enumeran las rutas de visualización activas con QueryDisplayConfig y GetDisplayConfigBufferSizes y se imprimen datos para cada ruta de acceso mediante 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";
}
}
Requisitos
| Requirement | Value |
|---|---|
| Cliente mínimo compatible | Disponible en Windows 7 y versiones posteriores de los sistemas operativos Windows. |
| de la plataforma de destino de | Universal |
| Encabezado | winuser.h (incluya Windows.h) |
| Biblioteca | User32.lib; OneCoreUAP.lib en Windows 10 |
| DLL de | User32.dll |
| conjunto de API de |
ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introducido en Windows 10, versión 10.0.14393) |
Consulte también
DISPLAYCONFIG_PATH_SOURCE_INFO