Share via


ChangeDisplaySettingsExA 함수(winuser.h)

ChangeDisplaySettingsEx 함수는 지정된 디스플레이 디바이스의 설정을 지정된 그래픽 모드로 변경합니다.

참고 Windows 8 이상 대상으로 디자인한 앱은 더 이상 픽셀당 32비트(bpp) 미만의 디스플레이 모드를 쿼리하거나 설정할 수 없습니다. 이러한 작업은 실패합니다. 이러한 앱에는 Windows 8 대상으로 하는 호환성 매니페스트가 있습니다. Windows 8 여전히 Windows 8 매니페스트 없이 빌드된 데스크톱 앱에 대해 8비트 및 16비트 색 모드를 지원합니다. 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이면 현재 레지스트리에 있는 모든 값이 표시 설정에 사용됩니다. lpDevMode 매개 변수에 대해 NULL을 전달하고 dwFlags 매개 변수에 대해 0을 전달하는 것이 동적 모드 변경 후 기본 모드로 돌아가는 가장 쉬운 방법입니다.

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
현재 화면의 그래픽 모드가 동적으로 변경되고 레지스트리에서 그래픽 모드가 업데이트됩니다. 모드 정보는 USER 프로필에 저장됩니다.
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

dwFlagsCDS_VIDEOPARAMETERS 경우 lParamVIDEOPARAMETERS 구조체에 대한 포인터입니다. 그렇지 않으면 lParamNULL이어야 합니다.

반환 값

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
그래픽 모드가 작동하려면 컴퓨터를 다시 시작해야 합니다.

설명

ChangeDisplaySettingsEx에 전달된 DEVMODE 구조체가 유효하고 디스플레이 드라이버에서 지원하는 값만 포함하도록 하려면 EnumDisplaySettings 함수에서 반환된 DEVMODE를 사용합니다.

프로그래밍 방식으로 다중 모니터 시스템에 디스플레이 모니터를 추가할 때 DEVMODE.dmFields 를 DM_POSITION 설정하고 기존 모니터의 디스플레이 영역 중 하나 이상의 픽셀에 인접한 추가 중인 모니터의 위치( DEVMODE.dmPosition)를 지정합니다. 모니터를 분리하려면 DEVMODE.dmFields 를 DM_POSITION 설정하지만 DEVMODE.dmPelsWidthDEVMODE.dmPelsHeight 를 0으로 설정합니다. 자세한 내용은 여러 디스플레이 모니터를 참조하세요.

표시 모드가 동적으로 변경되면 다음 메시지 매개 변수를 사용하여 실행 중인 모든 애플리케이션에 WM_DISPLAYCHANGE 메시지가 전송됩니다.

매개 변수 의미
wParam 픽셀당 새 비트
LOWORD(lParam) 새 픽셀 너비
HIWORD(lParam) 새 픽셀 높이
 

둘 이상의 디스플레이에 대한 설정을 동시에 변경하려면 먼저 각 디바이스에 대해 ChangeDisplaySettingsEx를 개별적으로 호출하여 변경 내용을 적용하지 않고 레지스트리를 업데이트합니다. 그런 다음 NULL 디바이스를 사용하여 ChangeDisplaySettingsEx를 다시 한 번 호출하여 변경 내용을 적용합니다. 예를 들어 두 디스플레이에 대한 설정을 변경하려면 다음을 수행합니다.


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