EnumDisplaySettings은 지정된 디스플레이 장치에 대한 지정한 모드 인덱스 번호에 해당하는 정보를 얻는다
● 선언
Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Boolean
● 인수
lpszDeviceName ━ 디스플레이 장치를 지정한다. DISPLAY_DEVICE.DeviceName의 값이나 Null이다, Null이면 현재 디스플레이 장치가 선택된다
iModeNum ━ 정보 타입을 나타내며, 그래픽 해상도 모드 인덱스 번호나, 지정된 상수 값을 지정할 수 있다. 인덱스 번호는 0부터 시작하며 1씩 증가한다
lpDevMode ━ 정보를 저장할 구조체
● 반환
성공 ━ 0이 아닌 값
실패 ━ 0, iModeNum이 디스플레이 디바이스 인덱스 번호보다 클때
iModeNum 사용, 정보 타입
상수 | 값 | 설명 |
---|---|---|
ENUM_CURRENT_SETTINGS | -1 | 현재 설정 모드 정보 |
ENUM_REGISTRY_SETTINGS | -2 | 현재 레지스트리에 저장된 설정 정보 |
다음은 소스의 결과 이미지 입니다.
소스입니다.
Option Explicit
Private Declare Function EnumDisplayDevices Lib "user32" Alias "EnumDisplayDevicesA" (Unused As Any, ByVal iDevNum As Long, lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Long) As Boolean
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Boolean
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DISPLAY_DEVICE_ACTIVE As Long = &H1
Private Type DISPLAY_DEVICE
cb As Long
DeviceName As String * 32
DeviceString As String * 128
StateFlags As Long
DeviceID As String * 128
DeviceKey As String * 128
End Type
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Sub Form_Load()
Dim DisplayDeviceInfo As DISPLAY_DEVICE ' 디스플레이 다바이스 정보 구조체
Dim DisplayInfo As DEVMODE ' 디스플레이 설정 정보 구조체
Dim DNum As Long ' 디바이스 인덱스 번호, 디스플레이 모드 인덱스 번호
Dim Ret As Long ' 반환값
Me.AutoRedraw = True
Ret = -1 ' 활성중인 디스플레이 장치의 정보를 얻는다.
DNum = 0
DisplayDeviceInfo.cb = Len(DisplayDeviceInfo)
Do
If Not Ret = -1 Then
If (DisplayDeviceInfo.StateFlags And DISPLAY_DEVICE_ACTIVE) = DISPLAY_DEVICE_ACTIVE Then
Exit Do
End If
DNum = DNum + 1
End If
DisplayDeviceInfo.cb = Len(DisplayDeviceInfo)
Ret = EnumDisplayDevices(ByVal 0&, DNum, DisplayDeviceInfo, ByVal 0&)
Loop While Not Ret = 0
Ret = -1 ' 활성중인 디스플레이 장치에 대한 디스플레이 모드를 구한다.
DNum = 0
With mfgMode
.Rows = 2
.Cols = 5
.FixedCols = 0
.FixedRows = 1
.Row = 0
.Col = 0
.FixedAlignment(.Col) = flexAlignCenterCenter
.ColAlignment(.Col) = flexAlignCenterCenter
.Text = "모드 인덱스 번호"
.ColWidth(.Col) = Me.TextWidth(.Text) + 100
.Col = 1
.FixedAlignment(.Col) = flexAlignCenterCenter
.ColAlignment(.Col) = flexAlignCenterCenter
.Text = "수평 해상도"
.ColWidth(.Col) = Me.TextWidth(.Text) + 100
.Col = 2
.FixedAlignment(.Col) = flexAlignCenterCenter
.ColAlignment(.Col) = flexAlignCenterCenter
.Text = "수직 해상도"
.ColWidth(.Col) = Me.TextWidth(.Text) + 100
.Col = 3
.FixedAlignment(.Col) = flexAlignCenterCenter
.ColAlignment(.Col) = flexAlignCenterCenter
.Text = "색상 비트수"
.ColWidth(.Col) = Me.TextWidth(.Text) + 100
.Col = 4
.FixedAlignment(.Col) = flexAlignCenterCenter
.ColAlignment(.Col) = flexAlignCenterCenter
.Text = "모니터 재생율"
.ColWidth(.Col) = Me.TextWidth(.Text) + 100
Do
If Not Ret = -1 Then
.Rows = DNum + 2
.Row = .Rows - 1
.Col = 0
.Text = DNum
.Col = 1
.Text = Format(DisplayInfo.dmPelsWidth, "@@@@")
.Col = 2
.Text = Format(DisplayInfo.dmPelsHeight, "@@@@")
.Col = 3
.Text = DisplayInfo.dmBitsPerPel
.Col = 4
.Text = DisplayInfo.dmDisplayFrequency & "Hz"
DNum = DNum + 1
End If
Ret = EnumDisplaySettings(DisplayDeviceInfo.DeviceName, DNum, DisplayInfo)
Loop While Not Ret = 0
End With
End Sub
Private Function GetVBStringFromAPIString(ByVal Str As String) As String ' API에서 사용한 문자열이 담겨있는 버퍼에 유용한 문자열만 취한다.
GetVBStringFromAPIString = Left$(Str, InStr(1, Str, vbNullChar) - 1)
End Function
'API' 카테고리의 다른 글
CreateCompatibleDC를 사용한 이미지의 DC를 생성하자. (0) | 2011.09.30 |
---|---|
ChangeDisplaySettings을 사용한 해상도 변경 (0) | 2011.09.29 |
EnumDisplayDevices를 사용한 디스플레 장치 정보 얻기 (0) | 2011.09.28 |
WM_MOUSEWHEEL 윈도우 메세지를 사용한 휠 버튼 사용 (0) | 2011.09.26 |
LoadCursorFromFile을 사용한 에니메이션 커서 파일(*.ani) 사용하기 (0) | 2011.09.26 |