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

    + Recent posts