Tipp 0409 Adapter-Informationen auslesen
Autor/Einsender:
Datum:
  Alexander Csadek
21.08.2005
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 8
Die Informationen über verfügbare Adapter (Grafikkarten) auszulesen, ist mit DirectX 8 nicht sehr schwer, sind für die Spiele-Entwicklung allerdings sehr wichtig, ob der Anwender im Spiel seine gewünschte Bildschirmauflösung wählen kann oder ob das Spiel prüft, ob die benötigte Bildschirmauflösung von der Grafikkarte unterstützt wird. In DirectX 8 wird für Grafikkarten der Begriff Adapter verwendet.
Über das Direct3D8-Objekt erhält man folgende Informationen pro Adapter :
- Adapter Identifier
- Monitor Handle
- aktueller DisplayMode
- Anzahl unterstützer Display Mode
- die unterstützten Display Mode
Folgende Methoden stellt das Direct3D8-Objekt zum Auslesen der Informationen zur Verfügung:
GetAdapterCount Liefert die Anzahl der Adapter, wobei nicht unterschieden wird, ob mehrere Grafikkarten oder eine Grafikkarte mit zwei oder mehr Anschlüssen vorhanden sind.
GetAdapterIdentifier Liefert pro Adapter den Typ D3DADAPTER_IDENTIFIER8 mit Informationen über den Adapter (Bezeichnung, Treiber usw.). Zu beachten ist, dass die Information in Description und Driver als Byte-Block hinterlegt ist.
GetAdapterMonitor Liefert einen Handle des angeschlossenen Monitors pro Adapter. Dies ist dann wichtig, wenn die Ausgabe nicht am Standard-Monitor (Primary Display) erfolgen soll.
GetAdapterDisplayMode Füllt den Typ D3DDISPLAYMODE mit dem aktuellen Display Mode des Adapters wie Format (CONST_D3DFORMAT) sowie Breite, Höhe und RefreshRate in Hz.
GetAdapterModeCount Liefert die Anzahl der verfügbaren Display Modes eines Adapters.
EnumAdapterModes Füllt den Typ D3DDISPLAYMODE mit Informationen des verfügbaren Display Modes eines Adapters.
Es folgt nun der für diesen Tipp relevante Code...
 
Private Sub GetAdapterInfo()
  Dim intAdapterCount As Integer
  Dim intAdapterModeCount As Integer
  Dim i As Integer, j As Integer

  On Error GoTo ErrOut

  'Anzahl der Adapter ermitteln
  intAdapterCount = gD3D8.GetAdapterCount
  lst_AdapterInfo.AddItem "Anzahl der Adapter: " & intAdapterCount
  lst_AdapterInfo.AddItem ""

  'Folgende Informationen pro Adapter werden ermittelt:
  '- Adapter Identifier
  '- Monitor Handle
  '- aktueller DisplayMode
  '- Anzahl unterstützer Display Mode
  '- die unterstützten Display Mode

  Dim myAdapterIdentifier As D3DADAPTER_IDENTIFIER8
  Dim myDisplayMode As D3DDISPLAYMODE
  Dim myDescription As String
  Dim myDriver As String

  For i = 0 To intAdapterCount - 1
    myDescription = "": myDriver = ""
    Call gD3D8.GetAdapterIdentifier(i, 0, myAdapterIdentifier)
    lst_AdapterInfo.AddItem "Informationen über Adapter " & i

    For j = 0 To 511
      myDescription = myDescription & _
            Chr(myAdapterIdentifier.Description(j))
      myDriver = myDriver & Chr(myAdapterIdentifier.Driver(j))
    Next j

    lst_AdapterInfo.AddItem "Description: " & Trim(myDescription)
    lst_AdapterInfo.AddItem "DeviceId: " & _
          myAdapterIdentifier.DeviceId
    lst_AdapterInfo.AddItem "Driver: " & Trim(myDriver)
    lst_AdapterInfo.AddItem "VendorId: " & _
          myAdapterIdentifier.VendorId

    'Monitor-Handle ermitteln
    lst_AdapterInfo.AddItem "Adapter-Monitor Handle: " & _
        gD3D8.GetAdapterMonitor(i)

    'Aktuellen Display-Mode ermitteln
    Call gD3D8.GetAdapterDisplayMode(i, myDisplayMode)
    lst_AdapterInfo.AddItem "aktueller DisplayMode: " & _
       myDisplayMode.Format & " (" & _
       GetDisplayFormat(myDisplayMode.Format) & ") " & _
       myDisplayMode.Width & "x" & myDisplayMode.Height & " " & _
       myDisplayMode.RefreshRate & "Hz"

    'Anzahl unterstützter Display Mode ermitteln
    intAdapterModeCount = gD3D8.GetAdapterModeCount(i)
    lst_AdapterInfo.AddItem _
         "Anzahl unterstützer Display Mode: " & intAdapterModeCount
    For j = 0 To intAdapterModeCount - 1
      Call gD3D8.EnumAdapterModes(i, j, myDisplayMode)
      lst_AdapterInfo.AddItem "   DisplayMode " & j & ": " & _
         myDisplayMode.Format & " (" & _
         GetDisplayFormat(myDisplayMode.Format) & ") " & _
         myDisplayMode.Width & "x" & myDisplayMode.Height & " " & _
         myDisplayMode.RefreshRate & "Hz"
    Next j
    lst_AdapterInfo.AddItem ""
  Next i
  
  Exit Sub

ErrOut:
  MsgBox "Fehler beim auslesen der Adapter-Informationen.", _
         vbInformation
End Sub
 
Hinweis
Um dieses Beispiel ausführen zu können, wird die DirectX 8 for Visual Basic Type Library benötigt (siehe dazu die Erläuterungen in der DirectX-Rubrik).

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,3 kB) Downloads bisher: [ 533 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 6. September 2011