vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Windows/System22.03.05
EnumDisplaySettings-Funktion

Diese Funktion enumeriert alle verfügbaren Bildschirmauflösungen einer Grafikkarte.

Betriebssystem:  Win95, Win98, WinNT 4.0, Win2000, WinMEViews:  4.369 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Deklaration:

    Declare Function EnumDisplaySettings Lib "user32.dll" _
      Alias "EnumDisplaySettingsA" ( _
      ByVal lpszDeviceName As String, _
      ByVal iModeNum As Long, _
      lpDevMode As DEVMODE) As Long

    Beschreibung:
    Diese Funktion enumeriert alle verfügbaren Bildschirmauflösungen einer Grafikkarte.

    Parameter:
    lpszDeviceNameUnter Windows 95 muss hier ein "VBNullString"-Zeichen übergeben werden, der die Standardgrafikkarteinterpretiert. Bei Windows 98/ME/NT/2000 kann ein "VBNullString"-Zeichen für die Standardgrafikkarte übergeben werden oder ein String in Form von "\\.\DISPLAYX" für eine entsprechende Grafikkarte, wobei das X mit dem Index der gewünschten Grafikkarte ersetzt werden muss. Die Grafikkarten und somit auch die Grafikkarten-Strings können mittels der EnumDisplayDevices-Funktionenumeriert werden.
    iModeNumErwartet einen 0-basierenden Index der Auflösung dieenumeriert werden soll. Alternativ kann auch eine der iModeNum-Konstanten übergeben werden, für die Standard- oder Registry-Einstellungen der aktuell aktiven Grafikkarte.
    lpDevModeErwartet eine Vorinitialisierte DEVMODE-Struktur dessen "dmSize" und "dmFields" Optionen gefüllt sind mit den benötigtenWerten.

    iModeNum Konstanten:

    Const ENUM_CURRENT_SETTINGS = -1
    ' Die Funktion soll die Struktur mit den aktuellen Einstellungen füllen
     
    Const ENUM_REGISTRY_SETTINGS = -2
    ' Die Funktion soll die Struktur mit den Registry-Einstellungen füllen

    Rückgabewert:
    Ist die Funktion erfolgreich, so ist die Rückgabe ein Wert "ungleich 0", andernfalls wird derWert "0" zurückgegeben. Unter Windows NT/2000 können Sie die GetLastError-Funktion für erweiterte Fehlerinformationen aufrufen.

    Beispiel:

    Private Declare Function EnumDisplaySettings Lib "user32.dll" _
      Alias "EnumDisplaySettingsA" ( _
      ByVal lpszDeviceName As String, _
      ByVal iModeNum As Long, _
      lpDevMode As DEVMODE) As Long
    Private Declare Function EnumDisplayDevices Lib "user32" _
      Alias "EnumDisplayDevicesA" ( _
      DeviceName As Any, _
      ByVal iDevNum As Long, _
       lpDisplayDevice As DISPLAY_DEVICE, _
      ByVal dwFlags As Long) As Long
    Private Declare Function ChangeDisplaySettings Lib "user32.dll" _
      Alias "ChangeDisplaySettingsA" ( _
      lpDevMode As Any, _
      ByVal dwFlags As Long) As Long
     
    Private Type DEVMODE
      dmDeviceName As String * 32
      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 * 32
      dmUnusedPadding As Integer
      dmBitsPerPixel As Integer
      dmPelsWidth As Long
      dmPelsHeight As Long
      dmDisplayFlags As Long
      dmDisplayFrequency As Long
      dmICMMethod As Long
      dmICMIntent As Long
      dmMediaType As Long
      dmDitherType As Long
      dmReserved1 As Long
      dmReserved2 As Long
      dmPanningWidth As Long ' (Win 2000)
      dmPanningHeight As Long ' (Win 2000)
    End Type
     
    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
     
    ' die benötigten DEVMODE dmFields-Konstanten
    Private Const DM_BITSPERPEL = &H40000 ' Die Struktur soll mit der Farbtiefe gefüllt werden
    Private Const DM_PELSWIDTH = &H80000 ' Die Struktur soll mit der Bildschirmbreite in Pixeln gefüllt werden
    Private Const DM_PELSHEIGHT = &H100000 ' Die Struktur soll mit der Bildschirmhöhe in Pixeln gefüllt werden
    Private Const DM_DISPLAYFREQUENCY = &H400000 ' Die Struktur soll mit Wiederholrate in Hertz gefüllt werden
    Private Const DM_DISPLAYFLAGS = &H200000 ' Die Struktur soll mit den Eigenschaften der Grafikkarte gefüllt werden
     
    ' DEVMODE DisplayFlags-Konstanten
    Private Const DM_GRAYSCALE = 1  ' Gerät unterstützt keine Farben, Grautöne werden unterstützt
    Private Const DM_INTERLACED = 2  ' Gerät unterstützt Farben
     
    ' DISPLAY_DEVICE StateFlags-Konstanten
    Private Const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = &H1 ' Das Gerät ist Teil des Desktops
    Private Const DISPLAY_DEVICE_MIRRORING_DRIVER = &H8 ' Dieses Gerät ist ein unsichtbarer Pseudo-Monitor
    Private Const DISPLAY_DEVICE_MODESPRUNED = &H8000000 ' Dieses Gerät hat mehr Grafikmodies 
    ' als das Ausgabegerät unterstützt
    Private Const DISPLAY_DEVICE_PRIMARY_DEVICE = &H4 ' Das Gerät ist die Standardgrafikkarte 
    Private Const DISPLAY_DEVICE_VGA_COMPATIBLE = &H10 ' Das Gerät ist VGA-kompatibel 
     
    ' EnumDisplaySettings iModeNum-Konstanten
    Private Const ENUM_CURRENT_SETTINGS = -1 ' Die Funktion soll die Struktur  
    ' mit den aktuellen Einstellungen füllen
    Private Const ENUM_REGISTRY_SETTINGS = -2 ' Die Funktion soll die Struktur  
    ' mit den Registry-Einstellungen füllen
     
    ' ChangeDisplaySettings dwFlags-Konstanten
    Private Const CDS_UPDATEREGISTRY = &H1 ' Die Einstellungen werden in der Registry gespeichert
    Private Const CDS_TEST = &H2 ' Testet die Auflösung ohne die Auflösung zu  
    ' ändern, die Rückgabe ist eine des Rückgabe-Konstanten
    Private Const CDS_FULLSCREEN = &H4 ' Der Grafikmodus soll im Vollbild angezeigt werden,  
    ' diese Einstellung kann nicht gespeichert werden
    Private Const CDS_GLOBAL = &H8 ' Speichert die Einstellungen für alle  
    ' Benutzer (in Verbindung mit CDS_UPDATEREGISTRY)
    Private Const CDS_SET_PRIMARY = &H10 ' Die angegebene Grafikkarte soll die Standardgrafikkarte werden
    Private Const CDS_RESET = &H40000000 ' Ändert die Auflösung auch wenn sie die  
    ' selbe ist, die momentan angezeigt wird
    Private Const CDS_NORESET = &H10000000 ' Speichert die Einstellungen in der Registry,  
    ' die Änderungen werden erst nach dem Neustart wirksam (in  
    ' Verbindung mit CDS_UPDATEREGISTRY)
     
    ' ChangeDisplaySettings Rückgabe-Konstanten
    Private Const DISP_CHANGE_SUCCESSFUL = 0 ' Das Andern oder Testen der Auflösung war erfolgreich
    Private Const DISP_CHANGE_RESTART = 1 ' Das Ändern der Auflösung erfordert einen Neustart
    Private Const DISP_CHANGE_FAILED = -1 ' Das Ändern oder Testen der Auflösung ist gescheitert
    Private Const DISP_CHANGE_BADMODE = -2 ' Die angegebene Auflösung wird nicht unterstützt 
    Private Const DISP_CHANGE_NOTUPDATED = -3 ' (Win NT/2000) Die Einstellungen wurden nicht gespeichert
    Private Const DISP_CHANGE_BADFLAGS = -4 ' Es wurden falsche Flags angegeben
    Private Const DISP_CHANGE_BADPARAM = -5 ' Es wurden falsche Parameter angegeben
    ' Alle möglichen Auflösungen für die Standardgrafikkarte ermitteln
    ' und Bildschirmauflösung in 800x600x16 ändern  (Windows 9x, ME, NT, 2000)
    Private Sub Command1_Click()
      Dim Retval As Long, Dev As DEVMODE, i As Long
      Dim TmpH As Long, TmpW As Long
     
      ' DEVMODE-Struktur vorinitialisieren
      Dev.dmSize = Len(Dev)
      Dev.dmFields = DM_BITSPERPEL Or DM_PELSWIDTH Or DM_PELSHEIGHT Or  _
      DM_DISPLAYFREQUENCY Or DM_DISPLAYFLAGS
     
      ' Alle möglichen Auflösungen für die Standardgrafikkarte ermitteln
      Do While EnumDisplaySettings(vbNullString, i, Dev) << 0
        Debug.Print "Bildschrimauflösung (" & CStr(i) & "): " &  _
        Dev.dmPelsWidth & "x" & Dev.dmPelsHeight & "x" &  _
        Dev.dmBitsPerPixel & " Freq: " & Dev.dmDisplayFrequency
        DoEvents
        i = i + 1
      Loop
     
      ' Aktuelle Bildschirmauflösung zwischenspeichern
      TmpW = Screen.Width / Screen.TwipsPerPixelX
      TmpH = Screen.Height / Screen.TwipsPerPixelY
     
      ' Auflösung der DEVMODE-Struktur ändern. ACHTUNG! Die Struktur ist  
      ' schon gefüllt, wir ändern nur die Auflösung
      With Dev
        .dmPelsWidth = 800
        .dmPelsHeight = 600
      End With
     
      ' Bildschirmauflösung Testen
      Retval = ChangeDisplaySettings(Dev, CDS_TEST)
      If Retval <= 0 Then
        Debug.Print "Testen der Auflösung 800x600x16 war erfolgreich."
     
        ' Bildschirmauflösung ändern
        Retval = ChangeDisplaySettings(Dev, CDS_UPDATEREGISTRY)
     
        ' Ergebnis auswerten
        Select Case Retval
        Case DISP_CHANGE_SUCCESSFUL ' Ändern der Bildschirmauflösung war erfolgreich 
     
          ' wiederherstellen der vorherigen Auflösung
          MsgBox "Klicken sie auf OK um die Original-Auflösung wiederherzustellen." 
          With Dev
            .dmPelsWidth = TmpW
            .dmPelsHeight = TmpH
          End With
          Retval = ChangeDisplaySettings(Dev, CDS_UPDATEREGISTRY)
        Case DISP_CHANGE_RESTART
          MsgBox "Damit die Änderungen wirksam werden, muss der PC neu gestartet werden."
        Case Else
          MsgBox "Die Bildschirmauflösung konnte nicht geändert werden." 
        End Select
      Else
        Debug.Print "Die Bildschirmauflösung kann nicht geändert werden"
      End If
    End Sub
    ' Alle möglichen Auflösungen aller Grafikkarten ermitteln (Windows 98, ME,  _
    ' NT, 2000)
    Private Sub Command2_Click()
      Dim Retval As Long, Dev As DEVMODE, i As Long, j As Long, Disp As DISPLAY_DEVICE 
      Dim TmpDevName As String ' Dient dazu, den DeviceNamen ohne  
      ' VBNullChar-Zeichen zwischenzuspeichern
      Dim TmpDevString As String ' Dient dazu, den DeviceString ohne  
      ' VBNullChar-Zeichen zwischenzuspeichern
     
      ' Falls Windows 95 läuft
      On Error GoTo ErrWin95
     
      ' DEVMODE-Struktur vorinitialisieren
      Dev.dmSize = Len(Dev)
      Dev.dmFields = DM_BITSPERPEL Or DM_PELSWIDTH Or DM_PELSHEIGHT Or  _
      DM_DISPLAYFREQUENCY Or DM_DISPLAYFLAGS
     
      ' DISPLAY_DEVICE-Struktur vorinitialisieren
      Disp.cb = Len(Disp)
     
      ' Alle Grafikkarten ermitteln
      Do While EnumDisplayDevices(ByVal 0&, i, Disp, 0&) << 0
     
        ' VBNullChar-Zeichen abtrennen
        TmpDevName = Left$(Disp.DeviceName, InStr(1, Disp.DeviceName,  _
        vbNullChar) - 1)
        TmpDevString = Left$(Disp.DeviceString, InStr(1,  _
        Disp.DeviceString, vbNullChar) - 1)
     
        ' Informationen zu der gefundenen Grafikkarte ausgeben
        If CBool(DISPLAY_DEVICE_PRIMARY_DEVICE And Disp.StateFlags) Then
           Debug.Print "Grafikkarte (Standard): " & TmpDevString
        ElseIf CBool(DISPLAY_DEVICE_ATTACHED_TO_DESKTOP And  _
        Disp.StateFlags) Then
           Debug.Print "Grafikkarte (Desktop): " & TmpDevString
        Else
          Debug.Print "Grafikkarte: " & TmpDevString
        End If
        i = i + 1
     
        ' Für jede gefundene Grafikkarte die Bildschirmauflösungen ermitteln 
        Do While EnumDisplaySettings(TmpDevName, j, Dev) << 0
          Debug.Print "Bildschrimauflösung (" & CStr(j) & "): " &  _
          Dev.dmPelsWidth & "x" & Dev.dmPelsHeight & "x" &  _
          Dev.dmBitsPerPixel & " Freq: " & Dev.dmDisplayFrequency
          DoEvents
          j = j + 1
        Loop
        Debug.Print vbCrLf & "--------------------------------------"
      Loop
     
      Exit Sub
     
      If Err.Number = 453 Then
        MsgBox "Dieses Beispiel läuft nur ab Windows 98"
      End If
    End Sub

    Diese Seite wurde bereits 4.369 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel