<StructLayout(LayoutKind.Sequential)> _
Public Structure DEVMODE1
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
Public dmDeviceName As String
Public dmSpecVersion As Short
Public dmDriverVersion As Short
Public dmSize As Short
Public dmDriverExtra As Short
Public dmFields As Integer
Public dmOrientation As Short
Public dmPaperSize As Short
Public dmPaperLength As Short
Public dmPaperWidth As Short
Public dmScale As Short
Public dmCopies As Short
Public dmDefaultSource As Short
Public dmPrintQuality As Short
Public dmColor As Short
Public dmDuplex As Short
Public dmYResolution As Short
Public dmTTOption As Short
Public dmCollate As Short
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
Public dmFormName As String
Public dmLogPixels As Short
Public dmBitsPerPel As Short
Public dmPelsWidth As Integer
Public dmPelsHeight As Integer
Public dmDisplayFlags As Integer
Public dmDisplayFrequency As Integer
Public dmICMMethod As Integer
Public dmICMIntent As Integer
Public dmMediaType As Integer
Public dmDitherType As Integer
Public dmReserved1 As Integer
Public dmReserved2 As Integer
Public dmPanningWidth As Integer
Public dmPanningHeight As Integer
End Structure
<DllImport("user32.dll")> _
Public Shared Function EnumDisplaySettings(ByVal deviceName As String, ByVal modeNum As Integer, ByRef devMode As DEVMODE1) As Integer
End Function
Function GetSupportedResolutions() As List(Of String)
Dim list1 As New List(Of String)
Dim lResult As Long
Dim i As Long
Dim DevM As New DEVMODE1
i = 0
Do
lResult = EnumDisplaySettings(Nothing, i, DevM)
If lResult = 0 Then Exit Do
With DevM
Dim res As String = .dmPelsWidth & "x" & .dmPelsHeight
If Not list1.Contains(res) AndAlso .dmBitsPerPel = 32 Then
list1.Add(res)
End If
End With
i = i + 1
Loop
Return list1
End Function