Функция ChangeDisplaySettingsExA (winuser.h)
Функция ChangeDisplaySettingsEx изменяет параметры указанного устройства отображения на указанный графический режим.
Синтаксис
LONG ChangeDisplaySettingsExA(
[in] LPCSTR lpszDeviceName,
[in] DEVMODEA *lpDevMode,
HWND hwnd,
[in] DWORD dwflags,
[in] LPVOID lParam
);
Параметры
[in] lpszDeviceName
Указатель на строку, завершающуюся значением NULL, которая указывает устройство отображения, режим графики которого изменится. Допустимы только имена устройств, возвращаемые EnumDisplayDevices. Дополнительные сведения об именах, связанных с этими устройствами, см. в EnumDisplayDevices.
Параметр lpszDeviceName
[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 | Используйте значение |
DM_POSITION | Используйте значение dmPosition. |
hwnd
Скрытный; должен быть null.
[in] dwflags
Указывает, как следует изменить графический режим. Этот параметр может быть одним из следующих значений.
Ценность | Значение |
---|---|
|
Графический режим для текущего экрана будет динамически изменен. |
|
Режим является временным в природе.
При переходе на другой рабочий стол этот режим не будет сбрасываться. |
|
Параметры будут сохранены в области глобальных параметров, чтобы они влияли на всех пользователей на компьютере. В противном случае изменяются только параметры для пользователя. Этот флаг действителен только при указании флага CDS_UPDATEREGISTRY. |
|
Параметры будут сохранены в реестре, но не вступают в силу. Этот флаг действителен только при указании флага CDS_UPDATEREGISTRY. |
|
Параметры следует изменить, даже если запрошенные параметры совпадают с текущими параметрами. |
|
Это устройство станет основным устройством. |
|
Системные тесты, если может быть задан запрошенный графический режим. |
|
Графический режим для текущего экрана будет динамически изменен, и графический режим будет обновлен в реестре. Сведения о режиме хранятся в профиле ПОЛЬЗОВАТЕЛЯ. |
|
При установке параметр lParam является указателем на структуру VIDEOPARAMETERS. |
|
Включает изменения параметров в небезопасных режимах графики. |
|
Отключает изменения параметров в небезопасных режимах графики. |
Указание CDS_TEST позволяет приложению определить, какие графические режимы фактически допустимы, не вызывая изменения системы на них.
Если CDS_UPDATEREGISTRY указан и можно динамически изменить графический режим, данные хранятся в реестре и возвращаются DISP_CHANGE_SUCCESSFUL. Если невозможно динамически изменить графический режим, данные хранятся в реестре и возвращаются DISP_CHANGE_RESTART.
Если указан CDS_UPDATEREGISTRY и данные не могут храниться в реестре, графический режим не изменяется и возвращается DISP_CHANGE_NOTUPDATED.
[in] lParam
Если
Возвращаемое значение
Функция ChangeDisplaySettingsEx возвращает одно из следующих значений.
Возвращаемый код | Описание |
---|---|
|
Изменение параметров выполнено успешно. |
|
Изменение параметров было неудачным, так как система поддерживает DualView. |
|
Недопустимый набор флагов был передан. |
|
Графический режим не поддерживается. |
|
Недопустимый параметр был передан. Это может включать недопустимый флаг или сочетание флагов. |
|
Драйвер отображения завершился ошибкой указанного графического режима. |
|
Не удается записать параметры в реестр. |
|
Для работы графического режима необходимо перезапустить компьютер. |
Замечания
Чтобы убедиться, что структура
При программном добавлении монитора в систему с несколькими мониторами задайте 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) |
См. также
функций контекста устройства
Обзор контекстов устройств