ChangeDisplaySettings

https://msdn.microsoft.com/ja-jp/library/ms535771.aspx https://msdn.microsoft.com/ja-jp/library/cc428506.aspx https://msdn.microsoft.com/ja-jp/library/ms534847.aspx

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

LONG ChangeDisplaySettings(
  LPDEVMODE lpDevMode,
  DWORD dwflags
);

パラメータ

lpDevMode
変更するグラフィックスモードを記述する DEVMODE 構造体へのポインタを指定します。dmSize メンバは、DEVMODE 構造体のサイズ(バイト単位)に初期化する必要があります。DEVMODE 構造体では、次のフィールドを使います。
メンバ意味
DmBitsPerPel1 ピクセルあたりのビット数(bpp)
DmPelsWidthピクセルの幅
DmPelsHeightピクセルの高さ
DmDisplayFlagsモードフラグ
DmDisplayFrequencyモードの周波数

DEVMODE 構造体では前記のメンバ以外にも、dmFields メンバに適切なフラグをセットする必要があります。これらのフラグにより、ディスプレイ設定の変更に使う DEVMODE 構造体のメンバを指定します。dmFields に適切なビットがセットされていないと、ディスプレイ設定は変更されません。次のフラグから、1 つ以上選択してセットします。

フラグ意味
DM_BITSPERPELdmBitsPerPel の値を使います。
DM_PELSWIDTHdmPelsWidth の値を使います。
DM_PELSHEIGHTdmPelsHeight の値を使います。
DM_DISPLAYFLAGSdmDisplayFlags の値を使います。
DM_DISPLAYFREQUENCYdmDisplayFrequency の値を使います。

LpDevMode パラメータが NULL の場合、現在レジストリにあるすべての値がディスプレイ設定に使われます。動的モードに変更した後で既定モードに戻す最も簡単な方法は、lpDevMode パラメータに NULL を、dwFlag パラメータに 0 を指定する方法です。

dwflags
グラフィックスモードの変更方法を指定します。ほとんどの場合、次のいずれかの値を指定します。
フラグ意味
0現在の画面のグラフィックスモードを動的に変更します。
CDS_UPDATEREGISTRY現在の画面のグラフィックスモードを動的に変更し、レジストリへの登録を更新します。モード情報は、USER プロファイルに格納されます。
CDS_TEST要求されたグラフィックスモードが設定できるかどうかをシステムでテストします。
CDS_FULLSCREENこのモードは、一時的なモードです。Windows NT では、別のデスクトップとの間で変更すると、このモードをリセットできなくなります。
CDS_GLOBALコンピュータ上の全ユーザーに設定を適用するために、設定をグローバルな設定領域に保存します。このフラグをセットしないと、特定のユーザーに対する設定だけが変更されます。このフラグは、CDS_UPDATEREGISTRY フラグと併用した場合にだけ有効になります。
CDS_SET_PRIMARYこのデバイスは、一次デバイスになります。
CDS_RESET要求された設定が現在の設定と同じ場合でも、設定が変更されます。
CDS_SETRECTすべてのアプリケーションに送信する WM_DISPLAYCHANGE メッセージに指定された lParam メッセージパラメータは、RECT 構造体へのポインタである必要があります。この構造体は、マルチスクリーン環境でのディスプレイデバイスの位置を示します。lParam パラメータに NULL を指定すると、ディスプレイデバイスはマルチスクリーン環境から切り離されます。
CDS_NORESET設定がレジストリに保存されますが、適用されません。このフラグは、CDS_UPDATEREGISTRY フラグと併用した場合だけに有効になります。

CDS_UPDATEREGISTRY が指定されていて、グラフィックスモードを動的に変更できる場合、情報はレジストリに格納され、DISP_CHANGE_SUCCESSFUL が返ります。グラフィックスモードを動的に変更できない場合、情報はレジストリに格納され、DISP_CHANGE_RESTART が返ります。

Windows NT:情報をレジストリに格納できない場合、グラフィックスモードは変更されず、DISP_CHANGE_NOTUPDATED が返ります。
CDS_TEST を指定すると、システムでグラフィックスモードを変更せずに、実際に有効なグラフィックスモードをアプリケーションで判断することができます。

戻り値

戻り値は、次のいずれかになります。

意味
DISP_CHANGE_SUCCESSFUL設定の変更が成功しました。
DISP_CHANGE_RESTARTグラフィックスモードを有効にするには、コンピュータを再起動する必要があります。
DISP_CHANGE_BADFLAGS渡されたフラグセットが無効です。
DISP_CHANGE_BADPARAM渡されたパラメータが無効です。パラメータに無効なフラグまたはフラグの組み合わせが含まれている可能性があります。
DISP_CHANGE_FAILEDディスプレイドライバが、指定したグラフィックスモードの設定に失敗しました。
DISP_CHANGE_BADMODEこのグラフィックスモードはサポートされていません。
DISP_CHANGE_NOTUPDATEDWindows NT のみ:レジストリに設定を書き込めません。

解説

EnumDisplaySettings 関数から返された DEVMODE を使うと、ディスプレイドライバでサポートされている値だけを格納している有効な DEVMODE ChangeDisplaySettings に渡すことができます。
表示モードが動的に変更されると、実行中のすべてのアプリケーションに WM_DISPLAYCHANGE メッセージと次のメッセージパラメータが送信されます。

パラメータ意味
WParam新しい bpp
LOWORD(lParam)新しいピクセルの幅
HIWORD(lParam)新しいピクセル高さ

対応情報

Windows NT/2000:Windows NT 3.5 以降
Windows 95/98:Windows 95 以降
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

CreateDC、 、ChangeDisplaySettingsEx

表示: