|
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
|
|
|
|
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: [ 543
]
|
|
|