次の方法で共有


ChangeDisplaySettingsExA 関数 (winuser.h)

ChangeDisplaySettingsEx 関数は、指定したディスプレイ デバイスの設定を指定したグラフィックス モードに変更します。

注意 Windows 8 以降を対象とするように設計したアプリでは、1 ピクセルあたり 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 構造体へのポインター。 lpDevMode が NULL場合、レジストリ内の現在のすべての値が表示設定に使用されます。 lpDevMode パラメーター NULL を渡し、dwFlags パラメーターに 0 を渡すことが、動的モードの変更後に既定のモードに戻る最も簡単な方法です。

dmSize メンバーは、DEVMODE 構造体のサイズ (バイト単位) に初期化する必要があります。 dmDriverExtra メンバーは、DEVMODE 構造体に続くプライベート ドライバー データのバイト数を示すために初期化する必要があります。 さらに、DEVMODE 構造体の次のいずれかのメンバーを使用できます。

メンバー 意味
dmBitsPerPel を する ピクセルあたりのビット数
dmPelsWidth を する ピクセル幅
dmPelsHeight ピクセルの高さ
dmDisplayFlags を する モード フラグ
dmDisplayFrequency を する モードの頻度
dmPosition を する マルチモニター構成でのデバイスの位置。
 

上記の 1 つ以上の DEVMODE メンバーを使用するだけでなく、表示設定を変更するには、dmFields メンバーに次の 1 つ以上の値を設定する必要があります。

価値 意味
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

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
グラフィックス モードを機能させるには、コンピューターを再起動する必要があります。

備考

ChangeDisplaySettingsEx に渡される DEVMODE 構造体が有効であり、ディスプレイ ドライバーでサポートされている値のみが含まれていることを確認するには、EnumDisplaySettings 関数によって返される DEVMODE を使用します。

プログラムによってディスプレイ モニターを複数モニター システムに追加する場合は、DEVMODE.dmFields をDM_POSITIONに設定し、追加するモニターの位置 (DEVMODE.dmPosition) を指定します。これは、既存のモニターの表示領域の少なくとも 1 ピクセルに隣接しています。 モニターをデタッチするには、DEVMODE.dmFields DM_POSITIONに設定しますが、DEVMODE.dmPelsWidth 設定し、DEVMODE.dmPelsHeight を 0 に します。 詳細については、「複数のディスプレイ モニターの」を参照してください。

表示モードが動的に変更されると、WM_DISPLAYCHANGE メッセージは、次のメッセージ パラメーターを使用して実行中のすべてのアプリケーションに送信されます。

パラメーター 意味
wParam ピクセルあたりの新しいビット数
LOWORD(lParam) 新しいピクセル幅
HIWORD(lParam) 新しいピクセルの高さ
 

複数のディスプレイの設定を同時に変更するには、最初に各デバイス ChangeDisplaySettingsEx を個別に呼び出して、変更を適用せずにレジストリを更新します。 次に、NULL デバイス ChangeDisplaySettingsEx をもう一度呼び出して、変更を適用します。 たとえば、2 つのディスプレイの設定を変更するには、次の操作を行います。


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 ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして ChangeDisplaySettingsEx を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー 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