Função QueryDisplayConfig (winuser.h)

A função QueryDisplayConfig recupera informações sobre todos os caminhos de exibição possíveis para todos os dispositivos de exibição ou exibições, na configuração atual.

Sintaxe

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

O tipo de informação a ser recuperada. O valor do parâmetro flags deve usar um dos valores a seguir.

Valor Significado
QDC_ALL_PATHS
0x00000001
Retorna todas as combinações de caminho possíveis de fontes para destinos.

Note

No caso de modos temporários, a configuração QDC_ALL_PATHS significa que os dados de modo retornados podem não ser os mesmos que são armazenados no banco de dados de persistência.

Note

Esse sinalizador pode ser muito caro para computação. Não é recomendável usar esse sinalizador, a menos que o chamador esteja tentando determinar o conjunto de conexões válidas entre fontes e destinos.

QDC_ONLY_ACTIVE_PATHS
0x00000002
Retorna apenas caminhos ativos no momento.

Note

No caso de modos temporários, a configuração QDC_ONLY_ACTIVE_PATHS significa que os dados de modo retornados podem não ser os mesmos que são armazenados no banco de dados de persistência.

QDC_DATABASE_CURRENT
0x00000004
Retorna caminhos ativos conforme definido no banco de dados CCD para as exibições conectadas no momento.

O parâmetro flags também pode ser or'ed bit a bit com zero ou mais dos valores a seguir.

Valor Significado
QDC_VIRTUAL_MODE_AWARE
0x00000010
Esse sinalizador deve ser or'ed bit a bit com outros sinalizadores para indicar que o chamador está ciente do suporte ao modo virtual.

Com suporte a partir do Windows 10.

QDC_INCLUDE_HMD
0x00000020
Esse sinalizador deve ser or'ed bit a bit com QDC_ONLY_ACTIVE_PATHS para indicar que o chamador gostaria de incluir exibições montadas na cabeça (HMDs) na lista de caminhos ativos. Consulte Comentários para obter mais informações.

Com suporte a partir do Windows 10 1703 Creators Update.

QDC_VIRTUAL_REFRESH_RATE_AWARE
0x00000040
Esse sinalizador deve ser or'ed bit a bit com outros sinalizadores para indicar que o chamador está ciente do suporte à taxa de atualização virtual.

Com suporte a partir do Windows 11.

[in, out] numPathArrayElements

Ponteiro para uma variável que contém o número de elementos em pathArray. Esse parâmetro não pode ser NULL. Se QueryDisplayConfig retornar ERROR_SUCCESS, numPathArrayElements será atualizado com o número de entradas válidas no pathArray.

[out] pathArray

Ponteiro para uma variável que contém uma matriz de elementos DISPLAYCONFIG_PATH_INFO . Cada elemento em pathArray descreve um único caminho de uma origem para um destino. Os índices de informações do modo de origem e de destino só são válidos em combinação com as tabelas modeInfoArray retornadas para a API ao mesmo tempo. Esse parâmetro não pode ser NULL. O pathArray sempre é retornado na ordem de prioridade do caminho. Para obter mais informações sobre a ordem de prioridade do caminho, consulte a Ordem de Prioridade do Caminho.

[in, out] numModeInfoArrayElements

Ponteiro para uma variável que especifica o número no elemento da tabela de informações do modo. Esse parâmetro não pode ser NULL. Se QueryDisplayConfig retornar ERROR_SUCCESS, numModeInfoArrayElements será atualizado com o número de entradas válidas no modeInfoArray.

[out] modeInfoArray

Ponteiro para uma variável que contém uma matriz de elementos DISPLAYCONFIG_MODE_INFO . Esse parâmetro não pode ser NULL.

[out, optional] currentTopologyId

Ponteiro para uma variável que recebe o identificador da topologia atualmente ativa no banco de dados CCD. Para obter uma lista de valores possíveis, consulte o tipo enumerado DISPLAYCONFIG_TOPOLOGY_ID .

O parâmetro currentTopologyId só é definido quando o valor do parâmetro flags é QDC_DATABASE_CURRENT.

Se o valor do parâmetro flags for definido como QDC_DATABASE_CURRENT, o parâmetro currentTopologyId não deverá ser NULL. Se o valor do parâmetro flags não estiver definido como QDC_DATABASE_CURRENT, o valor do parâmetro currentTopologyId deverá ser NULL.

Valor de devolução

A função retorna um dos seguintes códigos de retorno.

Código de retorno Descrição
ERROR_SUCCESS
A função foi bem-sucedida.
ERROR_INVALID_PARAMETER
A combinação de parâmetros e sinalizadores especificados é inválida.
ERROR_NOT_SUPPORTED
O sistema não está executando um driver gráfico que foi gravado de acordo com o Windows Display Driver Model (WDDM). A função só tem suporte em um sistema com um driver WDDM em execução.
ERROR_ACCESS_DENIED
O chamador não tem acesso à sessão do console. Esse erro ocorrerá se o processo de chamada não tiver acesso à área de trabalho atual ou estiver em execução em uma sessão remota.
ERROR_GEN_FAILURE
Erro não especificado.
ERROR_INSUFFICIENT_BUFFER
O caminho fornecido e o buffer de modo são muito pequenos.

Observações

Como a função GetDisplayConfigBufferSizes só pode determinar o tamanho da matriz necessária em um momento específico, é possível que entre chamadas para GetDisplayConfigBufferSizes e QueryDisplayConfig a configuração do sistema seja alterada e os tamanhos de matriz fornecidos não serão mais suficientes para armazenar os novos dados de caminho. Nessa situação, QueryDisplayConfig falha com ERROR_INSUFFICIENT_BUFFER e o chamador deve chamar GetDisplayConfigBufferSizes novamente para obter os novos tamanhos de matriz. Em seguida, o chamador deve alocar a quantidade correta de memória.

QueryDisplayConfig retorna caminhos na matriz de caminho especificada pelo parâmetro pathArray e os modos de origem e destino na matriz de modo especificada pelo parâmetro modeInfoArray . QueryDisplayConfig sempre retorna caminhos na ordem de prioridade do caminho. Se QDC_ALL_PATHS for definido no parâmetro flags , QueryDisplayConfig retornará todos os caminhos inativos após os caminhos ativos.

O caminho completo, o modo de origem e as informações do modo de destino estão disponíveis para todos os caminhos ativos. Os membros ModeInfoIdx no DISPLAYCONFIG_PATH_SOURCE_INFO e DISPLAYCONFIG_PATH_TARGET_INFO estruturas para a origem e o destino são configurados para esses caminhos ativos. Para caminhos inativos, as informações retornadas do modo de origem e de destino não estão disponíveis; portanto, as informações de destino na estrutura de caminho são definidas como valores padrão e os índices de modo de origem e de destino são marcados como inválidos. Para consultas de banco de dados, se os monitores de conexão atuais tiverem uma entrada, QueryDisplayConfig retornará informações completas de caminho, modo de origem e modo de destino (o mesmo que para caminhos ativos). No entanto, se o banco de dados não tiver uma entrada, QueryDisplayConfig retornará apenas as informações de caminho com os detalhes de destino padrão (o mesmo que para caminhos inativos).

Para obter um exemplo de como as informações de modo de origem e de destino se relacionam com informações de caminho, consulte Informações de relação do modo com informações de caminho.

O chamador pode usar DisplayConfigGetDeviceInfo para obter informações adicionais sobre o dispositivo de origem ou de destino, por exemplo, os nomes do monitor e monitorar o modo preferencial e o nome do dispositivo de origem.

Se um destino estiver sendo projetado, o membro statusFlags da estrutura DISPLAYCONFIG_PATH_TARGET_INFO terá um dos sinalizadores DISPLAYCONFIG_TARGET_FORCED_XXX definidos.

Se o sinalizador QDC_DATABASE_CURRENT estiver definido no parâmetro Flags , QueryDisplayConfig retornará o identificador de topologia da topologia de banco de dados ativa na variável à qual o parâmetro currentTopologyId aponta. Se o sinalizador QDC_ALL_PATHS ou QDC_ONLY_ACTIVE_PATHS estiver definido no parâmetro Flags , o parâmetro currentTopologyId deverá ser definido como NULL; caso contrário, QueryDisplayConfig retornará ERROR_INVALID_PARAMETER.

Se um chamador chamar QueryDisplayConfig com o sinalizador QDC_DATABASE_CURRENT definido no parâmetro flags , QueryDisplayConfig inicializará a estrutura de DISPLAYCONFIG_2DREGION especificada no membro totalSize da estrutura DISPLAYCONFIG_VIDEO_SIGNAL_INFO como zeros e não concluirá DISPLAYCONFIG_2DREGION.

A estrutura DEVMODE retornada pela função EnumDisplaySettings Win32 (descrita na documentação do SDK do Windows) contém informações relacionadas aos modos de origem e de destino. No entanto, as APIs CCD separam explicitamente os componentes do modo de origem e de destino.

Monitores especializados e montados na cabeça

QueryDisplayConfig e muitas outras APIs de exibição do Win32 têm reconhecimento limitado de monitores especializados e montados na cabeça, já que essas exibições não participam do ambiente de área de trabalho Windows. No entanto, há cenários em que é necessário entender a conectividade dessas exibições (por exemplo, cenários de proteção de conteúdo). Para esses cenários limitados, (QDC_INCLUDE_HMD | QDC_ONLY_ACTIVE_PATHS) pode ser usado para descobrir a conectividade de telas montadas na cabeça. Esses caminhos serão marcados com o sinalizador DISPLAYCONFIG_TARGET_IS_HMD no campo DISPLAYCONFIG_PATH_TARGET_INFO.statusFlags . Esse suporte foi adicionado na Atualização de Criadores do Windows 10 1703.

Virtualização de DPI

Essa API não participa da virtualização de DPI. Todos os tamanhos na estrutura DEVMODE estão em termos de pixels físicos e não estão relacionados ao contexto de chamada.

Exemplos

O exemplo a seguir enumera caminhos de exibição ativos com QueryDisplayConfig e GetDisplayConfigBufferSizes e imprime dados para cada caminho 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";
    }
}

Requirements

Requirement Valor
Cliente mínimo suportado Disponível em Windows 7 e versões posteriores dos sistemas operacionais Windows.
da Plataforma de Destino Universal
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib; OneCoreUAP.lib no Windows 10
de DLL User32.dll
Conjunto de API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introduzido no Windows 10, versão 10.0.14393)

Consulte também

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

DISPLAYCONFIG_TOPOLOGY_ID

DisplayConfigGetDeviceInfo

SetDisplayConfig