Функция 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 может иметь значение NULL. Значение NULL указывает устройство отображения по умолчанию. Устройство по умолчанию можно определить, вызвав EnumDisplayDevices и проверив флаг DISPLAY_DEVICE_PRIMARY_DEVICE.
[in] lpDevMode
Указатель на структуру DEVMODE , описывающую новый графический режим. Если lpDevMode имеет значение NULL, для параметра отображения будут использоваться все текущие значения в реестре. Передать значение NULL для параметра lpDevMode и 0 для параметра 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
Указывает, как следует изменить графический режим. Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Графический режим для текущего экрана будет динамически изменен. |
|
Режим является временным по своей природе.
При переходе на другой рабочий стол и с другого рабочего стола этот режим не будет сброшен. |
|
Параметры будут сохранены в области глобальных параметров, чтобы они повлияли на всех пользователей на компьютере. В противном случае изменяются только параметры пользователя. Этот флаг действителен только в том случае, если он указан с помощью флага CDS_UPDATEREGISTRY. |
|
Параметры будут сохранены в реестре, но не вступают в силу. Этот флаг действителен только в том случае, если он указан с помощью флага CDS_UPDATEREGISTRY. |
|
Параметры следует изменить, даже если запрошенные параметры совпадают с текущими параметрами. |
|
Это устройство станет основным устройством. |
|
Система проверяет, может ли быть задан запрошенный графический режим. |
|
Графический режим для текущего экрана будет динамически изменен, а графический режим будет обновлен в реестре. Сведения о режиме хранятся в профиле ПОЛЬЗОВАТЕЛЯ. |
|
Если этот параметр задан, параметр lParam является указателем на структуру VIDEOPARAMETERS . |
|
Включает изменения параметров для небезопасных графических режимов. |
|
Отключает изменения параметров для небезопасных графических режимов. |
Указание CDS_TEST позволяет приложению определить, какие графические режимы действительно допустимы, не вызывая изменения в системе.
Если указан CDS_UPDATEREGISTRY и можно динамически изменить графический режим, информация сохраняется в реестре и возвращается DISP_CHANGE_SUCCESSFUL. Если динамически изменить графический режим невозможно, сведения сохраняются в реестре и возвращаются DISP_CHANGE_RESTART.
Если указан CDS_UPDATEREGISTRY и данные не удалось сохранить в реестре, графический режим не изменяется и возвращается DISP_CHANGE_NOTUPDATED.
[in] lParam
Если dwFlagsCDS_VIDEOPARAMETERS,lParam является указателем на структуру VIDEOPARAMETERS . В противном случае lParam должен иметь значение NULL.
Возвращаемое значение
Функция ChangeDisplaySettingsEx возвращает одно из следующих значений.
Код возврата | Описание |
---|---|
|
Изменение параметров выполнено успешно. |
|
Изменение параметров не удалось, так как система поддерживает DualView. |
|
Передан недопустимый набор флагов. |
|
Режим графики не поддерживается. |
|
Передан недопустимый параметр. Это может быть недопустимый флаг или сочетание флагов. |
|
Драйвер дисплея не выполнил указанный графический режим. |
|
Не удается записать параметры в реестр. |
|
Чтобы графический режим работал, компьютер необходимо перезагрузить. |
Комментарии
Чтобы убедиться, что структура DEVMODE , переданная в ChangeDisplaySettingsEx , является допустимой и содержит только значения, поддерживаемые драйвером отображения, используйте DEVMODE , возвращаемый функцией EnumDisplaySettings .
При добавлении монитора дисплея в систему с несколькими мониторами программными средствами задайте для DEVMODE.dmFields значение DM_POSITION и укажите позицию (в DEVMODE.dmPosition) добавляемого монитора, которая находится рядом по крайней мере с одним пикселем области отображения существующего монитора. Чтобы отключить монитор, задайте для параметра DEVMODE.dmFields значение DM_POSITION но установите для devmode.dmPelsWidth и DEVMODE.dmPelsHeight значение 0. Дополнительные сведения см. в разделе Несколько мониторов отображения.
При динамическом изменении режима отображения 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 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-sysparams-ext-l1-1-1 (представлено в Windows 10 версии 10.0.14393) |
См. также раздел
Создание центра обработки данных