Compartilhar via


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

Parâmetros

[in] flags

O tipo de informações a serem recuperadas. 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.

Observação

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.

Observação

Esse sinalizador pode ser muito caro para a 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.

Observação

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. Confira 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 de Windows 11.

[in, out] numPathArrayElements

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

[out] pathArray

Ponteiro para uma variável que contém uma matriz de elementos DISPLAYCONFIG_PATH_INFO . Cada elemento em pPathInfoArray 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 pmodeInfoArray retornadas para a API ao mesmo tempo. Esse parâmetro não pode ser NULL. O pPathInfoArray sempre é retornado na ordem de prioridade do caminho. Para obter mais informações sobre a ordem de prioridade do caminho, consulte 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, pNumModeInfoArrayElements será atualizado com o número de entradas válidas em pModeInfoArray.

[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 pCurrentTopologyId 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 pCurrentTopologyId 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 pCurrentTopologyId deverá ser NULL.

Valor retornado

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 Modelo de Driver de Exibição do Windows (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
Ocorreu um erro não especificado.
ERROR_INSUFFICIENT_BUFFER
O caminho fornecido e o buffer de modo são muito pequenos.

Comentários

Como a função GetDisplayConfigBufferSizes só pode determinar o tamanho necessário da matriz 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 sejam 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 que o parâmetro pPathInfoArray especifica e os modos de origem e destino na matriz de modo especificada pelo parâmetro pModeInfoArray . QueryDisplayConfig sempre retorna caminhos na ordem de prioridade do caminho. Se QDC_ALL_PATHS estiver definido no parâmetro Flags , QueryDisplayConfig retornará todos os caminhos inativos após os caminhos ativos.

As informações de caminho completo, modo de origem e 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 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 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 de caminho completo, 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 do 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 com força, o membro statusFlags da estrutura DISPLAYCONFIG_PATH_TARGET_INFO terá um dos sinalizadores de 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 para a qual o parâmetro pCurrentTopologyId aponta. Se o sinalizador QDC_ALL_PATHS ou QDC_ONLY_ACTIVE_PATHS estiver definido no parâmetro Flags , o parâmetro pCurrentTopologyId 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 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 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 montados na cabeça e especializados, já que essas telas não participam do ambiente de área de trabalho do 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 com a 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";
    }
}

Requisitos

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

Confira também

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

DISPLAYCONFIG_TOPOLOGY_ID

DisplayConfigGetDeviceInfo

SetDisplayConfig