ディスプレイ解像度等の表示と変更 <TOP>
表示できる解像度、画面の色を取得しリストに表示します。
EnumDisplaySettings 解像度等の取得
ChangeDisplaySettings 解像度等の変更(Windows3.5(1)以降、Windows95以降)
目的の解像度、画面の色数に設定も可能です。
参考(Windows98、Windows2000以降)
Declare Function ChangeDisplaySettingsEx& Lib "user32" Alias
"ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevMode
As Any, ByVal hWnd&, ByVal dwFlags&, lParam As Any)
'======================================== '= 解像度変更 '= (Disp_Setting.bas) '======================================== #include "Windows.bi" #define CCHDEVICENAME 32 'デバイス名の長さを示す定数 #define CCHFORMNAME 32 'フォーム名の長さを示す定数 #define ENUM_CURRENT_SETTINGS -1 'ディスプレイ解像度の現在の設定値を求める #define DM_BITSPERPEL &H40000 ' #define DM_PELSWIDTH &H80000 ' #define DM_PELSHEIGHT &H100000 ' Type DEVMODE dmDeviceName As String * 32 'ドライバがサポートするデバイス名 dmSpecVersion As Integer '構造体の基準になった初期化データ仕様のバージョン番号 dmDriverVersion As Integer 'プリンタドライバのバージョン番号 dmSize As Integer 'この構造体のサイズ(バイト単位) dmDriverExtra As Integer 'この構造体に続くドライバ データのバイト数 dmFields As Long ' dmOrientation As Integer 'DMORIENT_PORTRAIT(縦置き)、DMORIENT_LANDSCAPE(横置き) dmPaperSize As Integer '用紙サイズ dmPaperLength As Integer 'dmPaperSizeメンバで指定した用紙の長さをオーバーライド dmPaperWidth As Integer 'dmPaperSizeメンバで指定した用紙の幅をオーバーライド dmScale As Integer '印刷出力をスケーリングするときの、スケーリング係数 dmCopies As Integer 'デバイスが複数の部数に対応する場合、印刷する部数 dmDefaultSource As Integer '予約済み(0) dmPrintQuality As Integer 'プリンタの解像度(ドット/インチ) dmColor As Integer 'カラープリンタの場合(DMCOLOR_COLOR・DMCOLOR_MONOCHROME) dmDuplex As Integer '両面印刷が可能なプリンタ(DMDUP_SIMPLEX・DMDUP_HORIZONTAL・DMDUP_VERTICAL) dmYResolution As Integer 'プリンタのy方向の解像度(ドット/インチ) dmTTOption As Integer 'TrueTypeフォントの印刷方法 dmCollate As Integer '複数部数を印刷するときにページ順にそろえるかどうか dmFormName As String * 32 'フォーム名を指定 dmUnusedPadding As Integer '使用しない dmBitsPerPixel As Long 'ディスプレイ デバイスの解像度をピクセルあたりのビット数で指定 dmPelsWidth As Long '可視のデバイスの表面の幅をピクセル単位で指定 dmPelsHeight As Long '可視のデバイスの表面の高さをピクセル単位で指定 dmDisplayFlags As Long 'デバイスのディスプレイ モードを指定 dmDisplayFrequency As Long 'ディスプレイデバイスのリフレッシュレート(垂直同期周波数)を1秒当たりのサイクル数(Hz)で指定 End Type ' ディスプレイデバイスのいずれかのグラフィックスモードに関する情報を取得 Declare Function Api_EnumDisplaySettings& Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName$, ByVal dwModeNum&,lpDevMode As DEVMODE) ' ディスプレイの解像度を変更 Declare Function Api_ChangeDisplaySettings& Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As DEVMODE, ByVal dwFlags&) Var shared List1 As Object Var shared Text1 As Object Var shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Var shared dm As DEVMODE Var shared ColorBit As Long Var shared DspWidth As Long Var shared DspHeight As Long Var shared LngNow As Long '================================================================ '= '================================================================ Declare Sub Info_Get edecl () Sub Info_Get() LngNow = Api_EnumDisplaySettings&(ByVal 0 , ENUM_CURRENT_SETTINGS , dm) If dm.dmFields And DM_BITSPERPEL Then ColorBit = dm.dmBitsPerPixel If dm.dmFields And (DM_PELSWIDTH Or DM_PELSHEIGHT) Then DspWidth = dm.dmPelsWidth : DspHeight = dm.dmPelsHeight Text1.SetWindowText "現在の解像度:" & Trim$(str$(DspWidth)) & " x " & Trim$(str$(DspHeight)) & " " & str$(ColorBit) & " ビット" & str$(dm.dmDisplayFrequency) & "Hz" End Sub '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var i As Integer For i = 0 To 64 If Api_EnumDisplaySettings(ByVal 0, i, dm) = 1 Then ZD1$ = Format$(i, "## ") ZD2$ = Format$(dm.dmPelsWidth, "#### × ") ZD3$ = Format$(dm.dmPelsHeight, "#### ") ZD4$ = Format$(dm.dmBitsPerPixel, "## ビット ") ZD5$ = Format$(dm.dmDisplayFrequency, "### Hz") List1.ADDSTRING ZD1$ & ZD2$ & ZD3$ & ZD4$ & ZD5$ End If Next Info_Get End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() If Api_EnumDisplaySettings(ByVal 0, List1.GetCursel, dm) = 1 Then RC = Api_ChangeDisplaySettings(dm, 0) End If Info_Get End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End