Compartir a través de


Función SetDisplayConfig (winuser.h)

La función SetDisplayConfig modifica la topología para mostrar, el origen y los modos de destino habilitando exclusivamente las rutas de acceso especificadas en la sesión actual.

Sintaxis

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 de pathArray.

[in, optional] pathArray

Matriz de todas las rutas de acceso de presentación que se van a establecer. Solo se establecen las rutas de acceso de esta matriz que tienen la marca DISPLAYCONFIG_PATH_ACTIVE establecida en el miembro flags de DISPLAYCONFIG_PATH_INFO . Este parámetro puede ser NULL. El orden en el que aparecen las rutas de acceso activas en esta matriz determina la prioridad de 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] numModeInfoArrayElements

Número de elementos en modeInfoArray.

[in, optional] modeInfoArray

Matriz de información del modo de origen y destino de presentación (DISPLAYCONFIG_MODE_INFO) a la que hace referencia el miembro modeInfoIdx de DISPLAYCONFIG_PATH_SOURCE_INFO y DISPLAYCONFIG_PATH_TARGET_INFO elemento de información de ruta de acceso de pathArray. Este parámetro puede ser NULL.

[in] flags

Or bit a bit de valores de marca que indica el comportamiento de esta función. Este parámetro puede ser uno de los siguientes valores o una combinación de los valores siguientes; 0 no es válido. Vea a continuación una descripción de las combinaciones de marcas válidas.

Value Significado
SDC_APPLY
0x00000080
Se establece la topología, el origen y el modo de destino resultantes.
SDC_NO_OPTIMIZATION
0x00000100
Modificador de la marca SDC_APPLY. Esto hace que el modo de cambio se obligue hasta el controlador para cada pantalla activa.
SDC_USE_SUPPLIED_DISPLAY_CONFIG
0x00000020
Se usa la información de la topología, el origen y el modo de destino que se proporcionan en pathArray y los parámetros modeInfoArray , en lugar de buscar la configuración en la base de datos.
SDC_SAVE_TO_DATABASE
0x00000200
La topología, el origen y el modo de destino resultantes se guardan en la base de datos.
SDC_VALIDATE
0x00000040
El sistema prueba la información de la topología, el origen y el modo de destino solicitados para determinar si se puede establecer.
SDC_ALLOW_CHANGES
0x00000400
Si es necesario, la función puede modificar la información del modo de origen y destino especificados para crear un conjunto de rutas de acceso de presentación funcionales.
SDC_TOPOLOGY_CLONE
0x00000002
El autor de la llamada solicita la última configuración de clonación de la base de datos de persistencia.
SDC_TOPOLOGY_EXTEND
0x00000004
El autor de la llamada solicita la última configuración extendida de la base de datos de persistencia.
SDC_TOPOLOGY_INTERNAL
0x00000001
El autor de la llamada solicita la última configuración interna de la base de datos de persistencia.
SDC_TOPOLOGY_EXTERNAL
0x00000008
El autor de la llamada solicita la última configuración externa de la base de datos de persistencia.
SDC_TOPOLOGY_SUPPLIED
0x00000010
El autor de la llamada proporciona los datos de ruta de acceso para que la función solo consulte la base de datos de persistencia para buscar y usar el modo de origen y destino.
SDC_USE_DATABASE_CURRENT
(SDC_TOPOLOGY_INTERNAL | SDC_TOPOLOGY_CLONE | SDC_TOPOLOGY_EXTEND | SDC_TOPOLOGY_EXTERNAL)
El autor de la llamada solicita una combinación de las cuatro configuraciones SDC_TOPOLOGY_XXX. Este valor informa a la API para establecer la última configuración de visualización conocida para los monitores conectados actuales.
SDC_PATH_PERSIST_IF_REQUIRED
0x00000800
Cuando la función procesa una solicitud de SDC_TOPOLOGY_XXX, puede forzar la persistencia de la ruta de acceso en un destino para satisfacer la solicitud si es necesario. Para obtener información sobre las otras marcas con las que se puede combinar esta marca, consulte la lista siguiente.
SDC_FORCE_MODE_ENUMERATION
0x00001000
El autor de la llamada solicita que el controlador tenga la oportunidad de actualizar la lista de modo GDI mientras SetDisplayConfig establece la nueva configuración de visualización. Este valor de marca solo es válido cuando también se especifican los valores de marca SDC_USE_SUPPLIED_DISPLAY_CONFIG y SDC_APPLY.
SDC_ALLOW_PATH_ORDER_CHANGES
0x00002000
Modificador de la marca SDC_TOPOLOGY_SUPPLIED que indica que SetDisplayConfig debe omitir el orden de ruta de acceso de la topología proporcionada al buscar en la base de datos. Cuando se establece esta marca, el conjunto de topologías es la topología más reciente que contiene todas las rutas de acceso, independientemente del orden de la ruta de acceso.
SDC_VIRTUAL_MODE_AWARE
0x00008000
Modificador de la SDC_USE_SUPPLIED_DISPLAY_CONFIG y marcas de SDC_TOPOLOGY_SUPPLIED que el autor de la llamada tiene en cuenta los modos virtuales. Se admite a partir de Windows 10.
SDC_VIRTUAL_REFRESH_RATE_AWARE
0x00020000
Modificador de la SDC_USE_SUPPLIED_DISPLAY_CONFIG y marcas de SDC_TOPOLOGY_SUPPLIED que el autor de la llamada conoce las tasas de actualización virtuales. Se admite a partir de Windows 11.

La lista siguiente contiene combinaciones válidas de valores para el parámetro Flags :

  • Se deben establecer SDC_APPLY o SDC_VALIDATE, pero no ambas.
  • Se deben establecer SDC_USE_SUPPLIED_DISPLAY_CONFIG o cualquier combinación de SDC_TOPOLOGY_XXX. SDC_USE_SUPPLIED_DISPLAY_CONFIG no se puede establecer con ninguna marca de SDC_TOPOLOGY_XXX.
  • SDC_NO_OPTIMIZATION solo se puede establecer con SDC_APPLY.
  • SDC_ALLOW_CHANGES se permite con cualquier otra combinación válida.
  • SDC_SAVE_TO_DATABASE solo se puede establecer con SDC_USE_SUPPLIED_DISPLAY_CONFIG.
  • SDC_PATH_PERSIST_IF_REQUIRED no se puede usar con SDC_USE_SUPPLIED_DISPLAY_CONFIG o SDC_TOPOLOGY_SUPPLIED.
  • SDC_FORCE_MODE_ENUMERATION solo es válido cuando se especifican SDC_APPLY y SDC_USE_SUPPLIED_DISPLAY_CONFIG.
  • SDC_ALLOW_PATH_ORDER_CHANGES solo se permite cuando se especifica SDC_TOPOLOGY_SUPPLIED.
  • SDC_TOPOLOGY_SUPPLIED no se puede usar con ninguna otra marca de SDC_TOPOLOGY_XXX. Debido a un problema de validación, si un autor de la llamada infringe esta regla, SetDisplayConfig no produce un error. Sin embargo, SetDisplayConfig omite la marca SDC_TOPOLOGY_SUPPLIED.
SDC_TOPOLOGY_XXX marcas se pueden usar en combinaciones. Por ejemplo, si se establecen SDC_TOPOLOGY_CLONE y SDC_TOPOLOGY_EXTEND, la API usa la topología de extensión o clonación más reciente, que cada topología se estableció con más recientemente para los monitores conectados actuales.

Valor devuelto

La función devuelve uno de los siguientes códigos de retorno.

Código devuelto Descripción
ERROR_SUCCESS
La función se ha realizado correctamente.
ERROR_INVALID_PARAMETER
La combinación de parámetros y marcas especificadas no es válida.
ERROR_NOT_SUPPORTED
El sistema no ejecuta un controlador de gráficos que se escribió según el modelo de controlador de pantalla de Windows (WDDM). La función solo se admite en un sistema con un controlador WDDM en ejecución.
ERROR_ACCESS_DENIED
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_GEN_FAILURE
Se ha producido un error no especificado.
ERROR_BAD_CONFIGURATION
La función no pudo encontrar una solución viable para los modos de origen y destino que el autor de la llamada no especificó.

Observaciones

La función SetDisplayConfig toma las rutas de acceso de visualización activas con cualquier información de modo de origen y de destino especificada y usa la mejor lógica de modo para generar cualquier información de modo de origen y de destino que falte. A continuación, esta función establece la ruta de acceso de presentación completa.

Los miembros ModeInfoIdx de las estructuras DISPLAYCONFIG_PATH_SOURCE_INFO y DISPLAYCONFIG_PATH_TARGET_INFO se usan para indicar si se proporcionan el modo de origen y destino para una ruta de acceso activa determinada. Si el valor de índice es DISPLAYCONFIG_PATH_MODE_IDX_INVALID para cualquiera de los dos, esto indica que no se especifica la información del modo. Es válido para la ruta de acceso más el modo de origen o la ruta de acceso más la información del modo de origen y de destino que se va a especificar para una ruta de acceso determinada. Sin embargo, no es válido para que la ruta de acceso más el modo de destino se especifique sin el modo de origen.

Los modos de origen y destino de cada identificador de origen y destino solo pueden aparecer en la matriz modeInfoArray una vez. Por ejemplo, un modo de origen para el identificador de origen S1 solo puede aparecer en la tabla una vez; si varias rutas de acceso hacen referencia al mismo origen, tienen que usar el mismo ModeInfoIdx.

La expectativa es que la mayoría de los autores de llamadas usen QueryDisplayConfig para obtener la configuración actual junto con otras posibilidades válidas y, a continuación, usar SetDisplayConfig para probar y establecer la configuración.

El orden en el que aparecen las rutas de acceso activas en la matriz PathArray determina la prioridad de la ruta de acceso.

De forma predeterminada, SetDisplayConfig nunca cambia ninguna ruta de acceso, modo de origen o información del modo de destino proporcionada. Si la mejor lógica de modo no puede encontrar una solución sin cambiar la información de ruta de acceso de visualización especificada, SetDisplayConfig produce un error con ERROR_BAD_CONFIGURATION. En este caso, el autor de la llamada debe especificar la marca de SDC_ALLOW_CHANGES para permitir que la función ajuste algunos de los detalles de origen y modo especificados para permitir que el cambio de ruta de acceso de presentación sea correcto.

Si los modos de origen y destino especificados o calculados tienen las mismas dimensiones, SetDisplayConfig establece automáticamente el escalado de ruta de acceso en DISPLAYCONFIG_PPR_IDENTITY antes de establecer la ruta de acceso de presentación y guardarla en la base de datos. Para obtener información sobre cómo SetDisplayConfig controla el escalado, consulte Escalado de la imagen de escritorio.

Cuando el autor de la llamada especifica la marca SDC_USE_SUPPLIED_DISPLAY_CONFIG para establecer una ruta de acceso de clonación y si algún índice de modo de origen no es válido en la matriz de rutas de acceso, SetDisplayConfig determina que todos los índices del modo de origen de ese origen no son válidos. SetDisplayConfig usa la mejor lógica de modo para determinar la información del modo de origen.

Excepto la marca de SDC_TOPOLOGY_SUPPLIED (para obtener más información sobre SDC_TOPOLOGY_SUPPLIED, vea el párrafo siguiente), las marcas de SDC_TOPOLOGY_XXX establecen la última configuración de ruta de acceso de presentación, incluida la información del modo de origen y de destino para ese tipo de topología. Para obtener información sobre las combinaciones de marcas de SDC_TOPOLOGY_XXX válidas, consulte la descripción del parámetro Flags . Los parámetros pathArray y modeInfoArray deben ser NULL y sus tamaños asociados deben ser cero. Por ejemplo, si se establecen SDC_TOPOLOGY_CLONE y SDC_TOPOLOGY_EXTEND, esta función usa la configuración de ruta de acceso de visualización más reciente o clonación más reciente. Si se solicita un único tipo de topología, se usa la última configuración de ese tipo. Si esa topología nunca se había establecido antes, SetDisplayConfig usa la mejor lógica de topología para encontrar la mejor topología y, a continuación, la mejor lógica de modo para encontrar el mejor modo de origen y destino que se va a usar. Si se había establecido una combinación de las marcas de topología y ninguna de ellas tenía entradas de base de datos, se usa la siguiente prioridad. Para portátiles: clone, extienda, interno y, a continuación, externo; para los escritorios, la prioridad se extiende y, a continuación, clona.

El autor de la llamada puede especificar la marca SDC_TOPOLOGY_SUPPLIED para indicar que establece solo la información de ruta de acceso (topología) y las solicitudes que SetDisplayConfig obtiene y, a continuación, usa la información del modo de origen y destino de la base de datos de persistencia. Si las rutas de acceso activas que proporciona el autor de la llamada no tienen una entrada en la base de datos de persistencia, se produce un error en SetDisplayConfig . En este caso, si el autor de la llamada llama a SetDisplayConfig de nuevo con los mismos datos de ruta de acceso, pero con el conjunto de marcas de SDC_USE_SUPPLIED_DISPLAY_CONFIG, SetDisplayConfig usa la mejor lógica de modo para crear la información del modo de origen y de destino. Cuando el llamador especifica SDC_TOPOLOGY_SUPPLIED, el llamador debe establecer el parámetro numModeInfoArrayElements en cero y el parámetro modeInfoArray enNULL; Sin embargo, el autor de la llamada debe establecer los parámetros pathArray y numPathArrayElements para la información de ruta de acceso que requiere el autor de la llamada. El autor de la llamada debe marcar todos los índices de modo de origen y destino como no válidos (DISPLAYCONFIG_PATH_MODE_IDX_INVALID) en estos datos de ruta de acceso.

En la tabla siguiente se proporcionan algunos escenarios comunes en los que se llama a SetDisplayConfig junto con las combinaciones de marcas que el autor de la llamada pasa al parámetro Flags para lograr los escenarios.

Escenario Combinación de marcas
Compruebe si se admite una configuración de visualización especificada en el equipo. SDC_VALIDATE | SDC_USE_SUPPLIED_DISPLAY_CONFIG
Establecer una configuración de visualización especificada y guardarla en la base de datos SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_SAVE_TO_DATABASE
Establecer una configuración de visualización temporal (es decir, la configuración de visualización no se guardará) SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG
Prueba de si se admite clonación en el equipo SDC_VALIDATE | SDC_TOPOLOGY_CLONE
Establecimiento de la topología de clonación SDC_APPLY | SDC_TOPOLOGY_CLONE
Establezca la topología clonada y permita que la persistencia de la ruta de acceso esté habilitada si es necesario para satisfacer la solicitud. SDC_APPLY | SDC_TOPOLOGY_CLONE | SDC_PATH_PERSIST_IF_REQUIRED
Volver de un modo temporal a la última configuración de visualización guardada SDC_APPLY| SDC_USE_DATABASE_CURRENT
Dada solo la información de ruta de acceso, establezca la configuración de presentación con la información de origen y destino de la base de datos para las rutas de acceso y omita el orden de la ruta de acceso. SDC_APPLY | SDC_TOPOLOGY_SUPPLIED | SDC_ALLOW_PATH_ORDER_CHANGES
 

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.

Requisitos

   
Cliente mínimo compatible Disponible en Windows 7 y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Universal
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introducido en Windows 10, versión 10.0.14393)

Consulte también

DISPLAYCONFIG_MODE_INFO

DISPLAYCONFIG_PATH_INFO

DISPLAYCONFIG_PATH_SOURCE_INFO

DISPLAYCONFIG_PATH_TARGET_INFO

QueryDisplayConfig