Bildschirmauflösung ändern (UPDATE: Zweite Frage!)

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von PhoenixBlaster.

    Bildschirmauflösung ändern (UPDATE: Zweite Frage!)

    okay ich hab jetzt diesen code verwendet:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Runtime
    3. Imports System.Runtime.InteropServices
    4. Class ResChanger
    5. <StructLayout(LayoutKind.Sequential)> _
    6. Public Structure DEVMODE
    7. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
    8. Public dmDeviceName As String
    9. Public dmSpecVersion As Short
    10. Public dmDriverVersion As Short
    11. Public dmSize As Short
    12. Public dmDriverExtra As Short
    13. Public dmFields As Integer
    14. Public dmOrientation As Short
    15. Public dmPaperSize As Short
    16. Public dmPaperLength As Short
    17. Public dmPaperWidth As Short
    18. Public dmScale As Short
    19. Public dmCopies As Short
    20. Public dmDefaultSource As Short
    21. Public dmPrintQuality As Short
    22. Public dmColor As Short
    23. Public dmDuplex As Short
    24. Public dmYResolution As Short
    25. Public dmTTOption As Short
    26. Public dmCollate As Short
    27. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
    28. Public dmFormName As String
    29. Public dmLogPixels As Short
    30. Public dmBitsPerPel As Short
    31. Public dmPelsWidth As Integer
    32. Public dmPelsHeight As Integer
    33. Public dmDisplayFlags As Integer
    34. Public dmDisplayFrequency As Integer
    35. Public dmICMMethod As Integer
    36. Public dmICMIntent As Integer
    37. Public dmMediaType As Integer
    38. Public dmDitherType As Integer
    39. Public dmReserved1 As Integer
    40. Public dmReserved2 As Integer
    41. Public dmPanningWidth As Integer
    42. Public dmPanningHeight As Integer
    43. End Structure
    44. Sub New()
    45. ' TODO: Complete member initialization
    46. End Sub
    47. Private Declare Function EnumDisplaySettings Lib "user32.dll" Alias "EnumDisplaySettingsA" _
    48. (ByVal deviceName As String, ByVal modeNum As Integer, ByRef devMode As DEVMODE) As Integer
    49. Private Declare Function ChangeDisplaySettingsEx Lib "user32.dll" Alias "ChangeDisplaySettingsExA" _
    50. (ByVal lpszDeviceName As String, ByRef lpDevMode As DEVMODE, ByVal hwnd As Int32, _
    51. ByVal dwflags As Int32, ByVal lParam As Int32) As Int32
    52. 'Struktur die die Bildschirmauflösung beschreibt
    53. Public Structure ScreenResolution
    54. Public Resolution As Size
    55. Public ColorDeptI As Integer
    56. Public ColorDeptS As String
    57. Public Total As String
    58. End Structure
    59. Private ScreenRes As New List(Of ScreenResolution)
    60. Private deviceName As String 'dies kann ab .net 2 einfacher mit Screen.PrimaryScreen.Bounds abfegragt werden
    61. Private Const ENUM_CURRENT_SETTINGS As Integer = -1
    62. Private Const CDS_UPDATEREGISTRY As Integer = 1 'entgültige umstellung der auflösung
    63. Private Const CDS_TEST As Integer = 2 'umstellung der auflösung testen
    64. Private Const DISP_CHANGE_SUCCESSFUL As Integer = 0
    65. Private Const DISP_CHANGE_RESTART As Integer = 1
    66. Private Const DISP_CHANGE_FAILED As Integer = -1
    67. Private Const DM_BITSPERPEL = &H40000
    68. Private Const DM_PELSWIDTH = &H80000
    69. Private Const DM_PELSHEIGHT = &H100000
    70. Private Const DM_DISPLAYFREQUENCY = &H400000
    71. ''' <summary>Sub New der ResChanger</summary>
    72. ''' <param name="devName">DeviceName des gewählten Bildschirmes.</param>
    73. Public Sub New(ByVal devName As String)
    74. deviceName = devName
    75. Dim dm As New DEVMODE()
    76. dm.dmDeviceName = New String(New Char(31) {})
    77. dm.dmFormName = New String(New Char(31) {})
    78. dm.dmSize = CShort(Marshal.SizeOf(dm))
    79. Dim counter As Integer = 0
    80. Do
    81. 'durch hochzählen des counter werden alle auflösungen ermittelt, bis 0 zurückgegeben wird 'wenn counter als -1 (ENUM_CURRENT_SETTINGS) übergeben wird, wird die aktuelle auflösung ermittelt
    82. If EnumDisplaySettings(deviceName, counter, dm) <> 0 Then ' Farbtiefe
    83. Dim Colors As String
    84. Select Case dm.dmBitsPerPel
    85. Case 4
    86. Colors = "16 Farben"
    87. Case 8
    88. Colors = "256 Farben"
    89. Case 16
    90. Colors = "HighColor"
    91. Case 24
    92. Colors = "24-Bit"
    93. Case 32
    94. Colors = "TrueColor"
    95. Case Else
    96. 'was eigentlich nicht sein darf
    97. Colors = "Keine Farbtiefe gefunden !!!"
    98. End Select
    99. 'liste füllen
    100. Dim sr As New ScreenResolution
    101. sr.ColorDeptI = dm.dmBitsPerPel
    102. sr.ColorDeptS = Colors
    103. sr.Resolution = New Size(dm.dmPelsWidth, dm.dmPelsHeight)
    104. sr.Total = dm.dmPelsWidth & " x " & dm.dmPelsHeight & " "
    105. sr = Nothing
    106. counter += 1
    107. Else
    108. Exit Do
    109. End If
    110. Loop
    111. End Sub
    112. #Region "Public Functions/Subs"
    113. ''' <summary>Stellt die Bildschrimauflösung.</summary>
    114. ''' <param name="res">Neue Auflösung als Size</param>
    115. ''' <param name="colorDept">Neue Farbtiefe als Integer</param>
    116. ''' <returns>True wenn die Umstellung erfolgreich war sonst False</returns>
    117. Public Function ChangeRes(ByVal res As Size, ByVal colorDept As Integer) As Boolean
    118. Try
    119. 'Struktur für die Übergabe vorbereiten
    120. Dim dm As New DEVMODE
    121. dm.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL Or DM_DISPLAYFREQUENCY
    122. dm.dmPelsHeight = res.Height
    123. dm.dmPelsWidth = res.Width
    124. dm.dmBitsPerPel = colorDept
    125. dm.dmDeviceName = New String(New Char(31) {})
    126. dm.dmFormName = New String(New Char(31) {})
    127. dm.dmSize = CShort(Marshal.SizeOf(dm))
    128. 'Auflösung umstellen
    129. Dim ret As Integer = ChangeDisplaySettingsEx(deviceName, dm, 0&, CDS_UPDATEREGISTRY, 0&)
    130. Select Case ret
    131. Case DISP_CHANGE_SUCCESSFUL
    132. Return True
    133. Case Else
    134. Return False
    135. End Select
    136. dm = Nothing
    137. Return True
    138. Catch ex As Exception
    139. End Try
    140. End Function
    141. #End Region
    142. #Region "Properties"
    143. ''' <summary>Gibt eine Liste mit allen möglichen Bildschrimauflösungen zurück.</summary>
    144. ''' <returns>Bildschirmauflösungen List(Of ScreenResolution)</returns>
    145. Public ReadOnly Property ScreenResolutions() As List(Of ScreenResolution)
    146. Get
    147. Return ScreenRes
    148. End Get
    149. End Property
    150. #End Region
    151. End Class


    Anwendung

    VB.NET-Quellcode

    1. Try
    2. r.ChangeRes(New Size(1920, 1200), 32)
    3. Catch ex As Exception
    4. End Try


    der funktioniert auch, komisch ist nur obwohl es funktioniert bekomm ich bei der Abfrage zurück das es nicht funktioniert hat außerdem zittert alles nach der Auflösungsänderung das zu unterbinden mit lockwindowupdate hat nicht funktioniert

    mfg

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „PhoenixBlaster“ ()

    DllImport, MessageBox.Show, zusätzlich: https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCkQFjAB&url=https%3A%2F%2Fwww.vb-paradise.de%2Findex.php%2FThread%2F61310-B%25C3%25B6ses-aus-VB6-VB2003-und-die-richtigen-VB-NET-Alternativen%2F&ei=g5DWU_SXHsKuPLCbgbAN&usg=AFQjCNENlIU5-qWBlp5zy8wyiU-L0nvvuQ&bvm=bv.71778758,d.ZWU

    Das von Dir angesprochene "As String * CCDEVICENAME" ist wohl irgendso nen Option Strict Off-Zeugs in VB.NET, wobei ein String mit nem Integer multipliziert wird.
    In .NET musste das halt parsen oder gleich den richtigen Typen verwenden.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: