Поделиться через


Функция ChangeDisplaySettingsExA (winuser.h)

Функция ChangeDisplaySettingsEx изменяет параметры указанного устройства отображения на указанный графический режим.

Примечание Приложения, которые вы разрабатываете для Windows 8 и более поздних версий, больше не могут запрашивать или устанавливать режимы отображения, которые меньше 32 бит на пиксель (bpp); Эти операции завершаются ошибкой. Эти приложения имеют манифест совместимости , предназначенный для Windows 8. Windows 8 по-прежнему поддерживает 8-разрядные и 16-разрядные режимы цветов для классических приложений, созданных без манифеста Windows 8; Windows 8 эмулирует эти режимы, но по-прежнему работает в 32-разрядном цветовом режиме.
 

Синтаксис

LONG ChangeDisplaySettingsExA(
  [in] LPCSTR   lpszDeviceName,
  [in] DEVMODEA *lpDevMode,
       HWND     hwnd,
  [in] DWORD    dwflags,
  [in] LPVOID   lParam
);

Параметры

[in] lpszDeviceName

Указатель на строку, завершающуюся значением NULL, которая указывает устройство отображения, режим графики которого изменится. Допустимы только имена устройств, возвращаемые EnumDisplayDevices. Дополнительные сведения об именах, связанных с этими устройствами, см. в EnumDisplayDevices.

Параметр lpszDeviceName может быть NULL. Значение NULL указывает устройство отображения по умолчанию. Устройство по умолчанию можно определить путем вызова EnumDisplayDevices и проверки флага DISPLAY_DEVICE_PRIMARY_DEVICE.

[in] lpDevMode

Указатель на структуру DEVMODE, описывающую новый графический режим. Если lpDevModeNULL, все значения в реестре будут использоваться для параметра отображения. Передача NULL для параметра lpDevMod e и 0 для параметра dwFlags dwFlags — самый простой способ вернуться в режим по умолчанию после динамического изменения режима.

Элемент dmSize должен быть инициализирован в размер в байтах структуры DEVMODE. Элемент dmDriverExtra необходимо инициализировать, чтобы указать количество байтов данных частного драйвера после структуры DEVMODE. Кроме того, можно использовать любой из следующих элементов структуры DEVMODE.

Член Значение
dmBitsPerPel Биты на пиксель
dmPelsWidth Ширина пикселя
dmPelsHeight Высота пикселя
dmDisplayFlags Флаги режима
dmDisplayFrequency Частота режима
dmPosition Положение устройства в конфигурации с несколькими мониторами.
 

Помимо использования одного или нескольких предыдущих элементов DEVMODE, необходимо также задать одно или несколько следующих значений в элементе dmFields, чтобы изменить параметры отображения.

Ценность Значение
DM_BITSPERPEL Используйте значение dmBitsPerPel.
DM_PELSWIDTH Используйте значение dmPelsWidth.
DM_PELSHEIGHT Используйте значение dmPelsHeight.
DM_DISPLAYFLAGS Используйте dmDisplayFlags значение.
DM_DISPLAYFREQUENCY Используйте значение dmDisplayFrequency.
DM_POSITION Используйте значение dmPosition.

hwnd

Скрытный; должен быть null.

[in] dwflags

Указывает, как следует изменить графический режим. Этот параметр может быть одним из следующих значений.

Ценность Значение
0
Графический режим для текущего экрана будет динамически изменен.
CDS_FULLSCREEN
Режим является временным в природе.

При переходе на другой рабочий стол этот режим не будет сбрасываться.

CDS_GLOBAL
Параметры будут сохранены в области глобальных параметров, чтобы они влияли на всех пользователей на компьютере. В противном случае изменяются только параметры для пользователя. Этот флаг действителен только при указании флага CDS_UPDATEREGISTRY.
CDS_NORESET
Параметры будут сохранены в реестре, но не вступают в силу. Этот флаг действителен только при указании флага CDS_UPDATEREGISTRY.
CDS_RESET
Параметры следует изменить, даже если запрошенные параметры совпадают с текущими параметрами.
CDS_SET_PRIMARY
Это устройство станет основным устройством.
CDS_TEST
Системные тесты, если может быть задан запрошенный графический режим.
CDS_UPDATEREGISTRY
Графический режим для текущего экрана будет динамически изменен, и графический режим будет обновлен в реестре. Сведения о режиме хранятся в профиле ПОЛЬЗОВАТЕЛЯ.
CDS_VIDEOPARAMETERS
При установке параметр lParam является указателем на структуру VIDEOPARAMETERS.
CDS_ENABLE_UNSAFE_MODES
Включает изменения параметров в небезопасных режимах графики.
CDS_DISABLE_UNSAFE_MODES
Отключает изменения параметров в небезопасных режимах графики.
 

Указание CDS_TEST позволяет приложению определить, какие графические режимы фактически допустимы, не вызывая изменения системы на них.

Если CDS_UPDATEREGISTRY указан и можно динамически изменить графический режим, данные хранятся в реестре и возвращаются DISP_CHANGE_SUCCESSFUL. Если невозможно динамически изменить графический режим, данные хранятся в реестре и возвращаются DISP_CHANGE_RESTART.

Если указан CDS_UPDATEREGISTRY и данные не могут храниться в реестре, графический режим не изменяется и возвращается DISP_CHANGE_NOTUPDATED.

[in] lParam

Если dwFlags CDS_VIDEOPARAMETERS, lParam является указателем на структуру videoPARAMETERS . В противном случае lParam должен быть null.

Возвращаемое значение

Функция ChangeDisplaySettingsEx возвращает одно из следующих значений.

Возвращаемый код Описание
DISP_CHANGE_SUCCESSFUL
Изменение параметров выполнено успешно.
DISP_CHANGE_BADDUALVIEW
Изменение параметров было неудачным, так как система поддерживает DualView.
DISP_CHANGE_BADFLAGS
Недопустимый набор флагов был передан.
DISP_CHANGE_BADMODE
Графический режим не поддерживается.
DISP_CHANGE_BADPARAM
Недопустимый параметр был передан. Это может включать недопустимый флаг или сочетание флагов.
DISP_CHANGE_FAILED
Драйвер отображения завершился ошибкой указанного графического режима.
DISP_CHANGE_NOTUPDATED
Не удается записать параметры в реестр.
DISP_CHANGE_RESTART
Для работы графического режима необходимо перезапустить компьютер.

Замечания

Чтобы убедиться, что структура DEVMODE, переданная ChangeDisplaySettingsEx, содержит только значения, поддерживаемые драйвером отображения, используйте DEVMODE, возвращаемую функцией EnumDisplaySettings.

При программном добавлении монитора в систему с несколькими мониторами задайте DEVMODE.dmFields DM_POSITION и укажите позицию (в DEVMODE.dmPosition) для добавляемого монитора, который находится рядом с одним пикселем области отображения существующего монитора. Чтобы отключить монитор, задайте DEVMODE.dmFields значение DM_POSITION, но задайте для DEVMODE.dmPelsWidth и DEVMODE.dmPelsHeight значение нулю. Дополнительные сведения см. в нескольких мониторов отображения.

При динамическом изменении режима отображения сообщение WM_DISPLAYCHANGE отправляется всем запущенным приложениям со следующими параметрами сообщения.

Параметры Значение
wParam Новые биты на пиксель
LOWORD(lParam) Новая ширина пикселя
HIWORD(lParam) Новая высота пикселя
 

Чтобы изменить параметры для нескольких дисплеев одновременно, сначала вызовите ChangeDisplaySettingsEx для каждого устройства отдельно, чтобы обновить реестр без применения изменений. Затем вызовите ChangeDisplaySettingsEx еще раз с устройством NULL, чтобы применить изменения. Например, чтобы изменить параметры для двух дисплеев, сделайте следующее:


ChangeDisplaySettingsEx (lpszDeviceName1, lpDevMode1, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (lpszDeviceName2, lpDevMode2, NULL, (CDS_UPDATEREGISTRY | CDS_NORESET), NULL);
ChangeDisplaySettingsEx (NULL, NULL, NULL, 0, NULL);

виртуализация DPI

Этот API не участвует в виртуализации DPI. Входные данные всегда относятся к физическим пикселям и не связаны с вызывающим контекстом.

Заметка

Заголовок winuser.h определяет ChangeDisplaySettingsEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winuser.h (включая Windows.h)
библиотеки User32.lib
DLL User32.dll
набор API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (представлено в Windows 10 версии 10.0.14393)

См. также

CreateDC

DEVMODE

функций контекста устройства

Обзор контекстов устройств

EnumDisplayDevices

EnumDisplaySettings

VIDEOPARAMETERS

WM_DISPLAYCHANGE