Função SetDisplayConfig (winuser.h)

A função SetDisplayConfig modifica os modos de exibição topologia, origem e destino habilitando exclusivamente os caminhos especificados na sessão atual.

Sintaxe

LONG SetDisplayConfig(
  [in]           UINT32                  numPathArrayElements,
  [in, optional] DISPLAYCONFIG_PATH_INFO *pathArray,
  [in]           UINT32                  numModeInfoArrayElements,
  [in, optional] DISPLAYCONFIG_MODE_INFO *modeInfoArray,
  [in]           UINT32                  flags
);

Parâmetros

[in] numPathArrayElements

Número de elementos em pathArray.

[in, optional] pathArray

Matriz de todos os caminhos de exibição que devem ser definidos. Somente os caminhos dentro dessa matriz que têm o sinalizador DISPLAYCONFIG_PATH_ACTIVE definido no membro de sinalizadores de DISPLAYCONFIG_PATH_INFO são definidos. Este parâmetro pode ser NULL. A ordem na qual os caminhos ativos aparecem nesta matriz determina a prioridade do caminho. Para obter mais informações sobre a ordem de prioridade do caminho, consulte Ordem de Prioridade do Caminho.

[in] numModeInfoArrayElements

Número de elementos em modeInfoArray.

[in, optional] modeInfoArray

Matriz de informações de modo de origem de exibição e de destino (DISPLAYCONFIG_MODE_INFO) referenciadas pelo membro modeInfoIdx de DISPLAYCONFIG_PATH_SOURCE_INFO e DISPLAYCONFIG_PATH_TARGET_INFO elemento de informações de caminho de pathArray. Este parâmetro pode ser NULL.

[in] flags

Um OR bit a bit de valores de sinalizador que indica o comportamento dessa função. Esse parâmetro pode ser um dos seguintes valores ou uma combinação dos seguintes valores; 0 não é válido. Veja abaixo uma descrição das combinações de sinalizador válidas.

Valor Significado
SDC_APPLY
0x00000080
A topologia, a origem e o modo de destino resultantes são definidos.
SDC_NO_OPTIMIZATION
0x00000100
Um modificador para o sinalizador SDC_APPLY. Isso faz com que o modo de alteração seja forçado até o driver para cada exibição ativa.
SDC_USE_SUPPLIED_DISPLAY_CONFIG
0x00000020
As informações de topologia, origem e modo de destino fornecidas nos parâmetros pathArray e modeInfoArray são usadas, em vez de procurar a configuração no banco de dados.
SDC_SAVE_TO_DATABASE
0x00000200
A topologia, a origem e o modo de destino resultantes são salvos no banco de dados.
SDC_VALIDATE
0x00000040
O sistema testa as informações de topologia, origem e modo de destino solicitadas para determinar se elas podem ser definidas.
SDC_ALLOW_CHANGES
0x00000400
Se necessário, a função pode modificar as informações especificadas do modo de origem e de destino para criar um conjunto de caminhos de exibição funcional.
SDC_TOPOLOGY_CLONE
0x00000002
O chamador solicita a última configuração de clone do banco de dados de persistência.
SDC_TOPOLOGY_EXTEND
0x00000004
O chamador solicita a última configuração estendida do banco de dados de persistência.
SDC_TOPOLOGY_INTERNAL
0x00000001
O chamador solicita a última configuração interna do banco de dados de persistência.
SDC_TOPOLOGY_EXTERNAL
0x00000008
O chamador solicita a última configuração externa do banco de dados de persistência.
SDC_TOPOLOGY_SUPPLIED
0x00000010
O chamador fornece os dados de caminho para que a função consulte apenas o banco de dados de persistência para localizar e usar o modo de origem e destino.
SDC_USE_DATABASE_CURRENT
(SDC_TOPOLOGY_INTERNAL | SDC_TOPOLOGY_CLONE | SDC_TOPOLOGY_EXTEND | SDC_TOPOLOGY_EXTERNAL)
O chamador solicita uma combinação de todas as quatro configurações de SDC_TOPOLOGY_XXX. Esse valor informa a API para definir a última configuração de exibição conhecida para os monitores conectados atuais.
SDC_PATH_PERSIST_IF_REQUIRED
0x00000800
Quando a função processa uma solicitação SDC_TOPOLOGY_XXX, ela pode forçar a persistência de caminho em um destino para atender à solicitação, se necessário. Para obter informações sobre os outros sinalizadores com os quais esse sinalizador pode ser combinado, consulte a lista a seguir.
SDC_FORCE_MODE_ENUMERATION
0x00001000
O chamador solicita que o driver tenha a oportunidade de atualizar a lista de modo GDI enquanto SetDisplayConfig define a nova configuração de exibição. Esse valor de sinalizador só é válido quando os valores de sinalizador SDC_USE_SUPPLIED_DISPLAY_CONFIG e SDC_APPLY também são especificados.
SDC_ALLOW_PATH_ORDER_CHANGES
0x00002000
Um modificador para o sinalizador SDC_TOPOLOGY_SUPPLIED que indica que SetDisplayConfig deve ignorar a ordem do caminho da topologia fornecida ao pesquisar o banco de dados. Quando esse sinalizador é definido, o conjunto de topologias é a topologia mais recente que contém todos os caminhos, independentemente da ordem do caminho.
SDC_VIRTUAL_MODE_AWARE
0x00008000
Um modificador para os sinalizadores de SDC_USE_SUPPLIED_DISPLAY_CONFIG e SDC_TOPOLOGY_SUPPLIED que o chamador está ciente dos modos virtuais. Com suporte a partir do Windows 10.
SDC_VIRTUAL_REFRESH_RATE_AWARE
0x00020000
Um modificador para o SDC_USE_SUPPLIED_DISPLAY_CONFIG e SDC_TOPOLOGY_SUPPLIED sinaliza que o chamador está ciente das taxas de atualização virtual. Com suporte a partir de Windows 11.

A lista a seguir contém combinações válidas de valores para o parâmetro Flags :

  • SDC_APPLY ou SDC_VALIDATE devem ser definidos, mas não ambos.
  • SDC_USE_SUPPLIED_DISPLAY_CONFIG ou qualquer combinação de SDC_TOPOLOGY_XXX deve ser definida. SDC_USE_SUPPLIED_DISPLAY_CONFIG não pode ser definido com nenhum sinalizador de SDC_TOPOLOGY_XXX.
  • SDC_NO_OPTIMIZATION só pode ser definido com SDC_APPLY.
  • SDC_ALLOW_CHANGES é permitido com qualquer outra combinação válida.
  • SDC_SAVE_TO_DATABASE só pode ser definido com SDC_USE_SUPPLIED_DISPLAY_CONFIG.
  • SDC_PATH_PERSIST_IF_REQUIRED não pode ser usado com SDC_USE_SUPPLIED_DISPLAY_CONFIG ou SDC_TOPOLOGY_SUPPLIED.
  • SDC_FORCE_MODE_ENUMERATION só é válido quando SDC_APPLY e SDC_USE_SUPPLIED_DISPLAY_CONFIG são especificados.
  • SDC_ALLOW_PATH_ORDER_CHANGES é permitido somente quando SDC_TOPOLOGY_SUPPLIED é especificado.
  • SDC_TOPOLOGY_SUPPLIED não pode ser usado com nenhum outro sinalizador SDC_TOPOLOGY_XXX. Devido a um problema de validação, se um chamador violar essa regra, SetDisplayConfig não falhará. No entanto, SetDisplayConfig ignora o sinalizador SDC_TOPOLOGY_SUPPLIED.
SDC_TOPOLOGY_XXX sinalizadores podem ser usados em combinações. Por exemplo, se SDC_TOPOLOGY_CLONE e SDC_TOPOLOGY_EXTEND estiverem definidos, a API usará a topologia clone ou extend mais recente, com a qual cada topologia foi definida mais recentemente para os monitores conectados atuais.

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_BAD_CONFIGURATION
A função não pôde encontrar uma solução viável para os modos de origem e destino que o chamador não especificou.

Comentários

A função SetDisplayConfig usa os caminhos de exibição ativos com qualquer informação especificada do modo de origem e destino e usa a melhor lógica de modo para gerar qualquer informação de modo de origem e destino ausentes. Essa função define o caminho de exibição completo.

Os membros ModeInfoIdx nas estruturas DISPLAYCONFIG_PATH_SOURCE_INFO e DISPLAYCONFIG_PATH_TARGET_INFO são usados para indicar se o modo de origem e destino são fornecidos para um determinado caminho ativo. Se o valor do índice for DISPLAYCONFIG_PATH_MODE_IDX_INVALID para qualquer um, isso indicará que as informações do modo não estão sendo especificadas. Ela é válida para o caminho mais o modo de origem ou o caminho mais informações do modo de origem e de destino a serem especificadas para um determinado caminho. No entanto, não é válido que o caminho mais o modo de destino seja especificado sem o modo de origem.

Os modos de origem e destino para cada identificador de origem e destino só podem aparecer na matriz modeInfoArray uma vez. Por exemplo, um modo de origem para o identificador de origem S1 só pode aparecer na tabela uma vez; se vários caminhos fizerem referência à mesma origem, eles precisarão usar o mesmo ModeInfoIdx.

A expectativa é que a maioria dos chamadores use QueryDisplayConfig para obter a configuração atual junto com outras possibilidades válidas e, em seguida, use SetDisplayConfig para testar e definir a configuração.

A ordem na qual os caminhos ativos aparecem na matriz PathArray determina a prioridade do caminho.

Por padrão, SetDisplayConfig nunca altera nenhuma informação de caminho, modo de origem ou modo de destino fornecidos. Se a melhor lógica de modo não puder encontrar uma solução sem alterar as informações de caminho de exibição especificadas, SetDisplayConfig falhará com ERROR_BAD_CONFIGURATION. Nesse caso, o chamador deve especificar o sinalizador SDC_ALLOW_CHANGES para permitir que a função ajuste alguns dos detalhes de origem e modo especificados para permitir que a alteração do caminho de exibição seja bem-sucedida.

Se os modos de origem e destino especificados ou calculados tiverem as mesmas dimensões, SetDisplayConfig definirá automaticamente o dimensionamento de caminho como DISPLAYCONFIG_PPR_IDENTITY antes de definir o caminho de exibição e salvá-lo no banco de dados. Para obter informações sobre como SetDisplayConfig lida com o dimensionamento, consulte Dimensionando a imagem da área de trabalho.

Quando o chamador especifica o sinalizador SDC_USE_SUPPLIED_DISPLAY_CONFIG para definir um caminho de clone e se algum índice de modo de origem for inválido na matriz de caminho, SetDisplayConfig determinará que todos os índices do modo de origem dessa origem são inválidos. SetDisplayConfig usa a melhor lógica de modo para determinar as informações do modo de origem.

Exceto pelo sinalizador SDC_TOPOLOGY_SUPPLIED (para obter mais informações sobre SDC_TOPOLOGY_SUPPLIED, consulte o parágrafo a seguir), os sinalizadores de SDC_TOPOLOGY_XXX definem as últimas configurações de caminho de exibição, incluindo as informações de modo de origem e destino para esse tipo de topologia. Para obter informações sobre combinações de sinalizadores de SDC_TOPOLOGY_XXX válidas, consulte a descrição do parâmetro Flags . Os parâmetros pathArray e modeInfoArray devem ser NULL e seus tamanhos associados devem ser zero. Por exemplo, se SDC_TOPOLOGY_CLONE e SDC_TOPOLOGY_EXTEND estiverem definidos, essa função usará o clone mais recente ou estenderá a configuração do caminho de exibição. Se um único tipo de topologia for solicitado, a última configuração desse tipo será usada. Se essa topologia nunca tinha sido definida antes, SetDisplayConfig usa a melhor lógica de topologia para encontrar a melhor topologia e, em seguida, a melhor lógica de modo para encontrar o melhor modo de origem e destino a ser usado. Se uma combinação dos sinalizadores de topologia tiver sido definida e nenhuma delas tiver entradas de banco de dados, a prioridade a seguir será usada. Para laptops: clone, estenda, interno e, em seguida, externo; para áreas de trabalho, a prioridade é estender e clonar.

O chamador pode especificar o sinalizador SDC_TOPOLOGY_SUPPLIED para indicar que ele define apenas as informações de caminho (topologia) e as solicitações que SetDisplayConfig obtém e, em seguida, usa as informações de modo de origem e destino do banco de dados de persistência. Se os caminhos ativos fornecidos pelo chamador não tiverem uma entrada no banco de dados de persistência, SetDisplayConfig falhará. Nesse caso, se o chamador chamar SetDisplayConfig novamente com os mesmos dados de caminho, mas com o sinalizador SDC_USE_SUPPLIED_DISPLAY_CONFIG definido, SetDisplayConfig usará a melhor lógica de modo para criar as informações do modo de origem e destino. Quando o chamador especifica SDC_TOPOLOGY_SUPPLIED, o chamador deve definir o parâmetro numModeInfoArrayElements como zero e o parâmetro modeInfoArray como NULL; no entanto, o chamador deve definir os parâmetros pathArray e numPathArrayElements para as informações de caminho que o chamador requer. O chamador deve marcar todos os índices de modo de origem e destino como inválidos (DISPLAYCONFIG_PATH_MODE_IDX_INVALID) neste caminho de dados.

A tabela a seguir fornece alguns cenários comuns em que SetDisplayConfig é chamado junto com as combinações de sinalizador que o chamador passa para o parâmetro Flags para obter os cenários.

Cenário Combinação de sinalizadores
Teste se há suporte para uma configuração de exibição especificada no computador SDC_VALIDATE | SDC_USE_SUPPLIED_DISPLAY_CONFIG
Definir uma configuração de exibição especificada e salvar no banco de dados SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_SAVE_TO_DATABASE
Definir uma configuração de exibição temporária (ou seja, a configuração de exibição não será salva) SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG
Testar se há suporte para clonagem no computador SDC_VALIDATE | SDC_TOPOLOGY_CLONE
Definir topologia de clone SDC_APPLY | SDC_TOPOLOGY_CLONE
Defina a topologia de clone e permita que a persistência de caminho seja habilitada se necessário para atender à solicitação SDC_APPLY | SDC_TOPOLOGY_CLONE | SDC_PATH_PERSIST_IF_REQUIRED
Retornar de um modo temporário para a última configuração de exibição salva SDC_APPLY| SDC_USE_DATABASE_CURRENT
Considerando apenas as informações de caminho, defina a configuração de exibição com as informações de origem e destino do banco de dados para os caminhos e ignore a ordem do caminho SDC_APPLY | SDC_TOPOLOGY_SUPPLIED | SDC_ALLOW_PATH_ORDER_CHANGES
 

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.

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

QueryDisplayConfig