Změna rozlišení obrazovky
Přidáno: 12.8.2010
Kategorie: Aplikace
Autor: Ondřej Linhart
Změnit rozlišení obrazovky je možné pouze pomocí Windows API. Pokud máte více monitorů, proběhne změna rozlišení primárního monitoru (pokud není nastaveno klonování obrazu na oba monitory).
Public Module UnsafeNativeMethods
Public Const CCDEVICENAME As Integer = 32
Public Const CCFORMNAME As Integer = 32
Public Const CDS_UPDATEREGISTRY As Integer = &H1
Public Const CDS_TEST As Long = &H2
Public Const DISP_CHANGE_FAILED As Integer = -1
Public Const DISP_CHANGE_RESTART As Integer = 1
Public Const DISP_CHANGE_SUCCESSFUL As Integer = 0
Public Const ENUM_CURRENT_SETTINGS As Integer = -1
<StructLayout(LayoutKind.Sequential)> Public Structure DEVMODE
<MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> 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
<MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
Public dmUnusedPadding As Short
Public dmBitsPerPel As Short
Public dmPelsWidth As Integer
Public dmPelsHeight As Integer
Public dmDisplayFlags As Integer
Public dmDisplayFrequency As Integer
End Structure
<DllImport("user32")> _
Public Function EnumDisplaySettings(ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Integer
End Function
<DllImport("user32")> _
Public Function ChangeDisplaySettings(ByRef DEVMODE As DEVMODE, ByVal flags As Integer) As Integer
End Function
Public Function ChangeResolution(ByVal width As Integer, ByVal height As Integer) As Integer
Dim devMode As DEVMODE
With devMode
.dmDeviceName = New [String](New Char(32) {})
.dmFormName = New [String](New Char(32) {})
.dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))
If EnumDisplaySettings(Nothing, ENUM_CURRENT_SETTINGS, devMode) <> 0 Then
.dmPelsWidth = width
.dmPelsHeight = height
Dim lResult As Integer
lResult = ChangeDisplaySettings(devMode, CDS_TEST)
If lResult = DISP_CHANGE_FAILED Then
Return lResult
End If
lResult = ChangeDisplaySettings(devMode, CDS_UPDATEREGISTRY)
Return lResult
End If
End With
End Function
End Module
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
Select Case ChangeResolution(1024, 768)
Case DISP_CHANGE_FAILED
Case DISP_CHANGE_RESTART
Case DISP_CHANGE_SUCCESSFUL
End Select
End Sub
End Module