Seite 1 von 2

DirectX Version

Verfasst: 27.09.2006 16:09
von a14xerus
Hi Leute, gibt es einen Befehl, mit dem man die DirectX Version zurückgeben kann?

Verfasst: 27.09.2006 16:13
von Kaeru Gaman
Gute Frage, interessiert mich auch mal...

ich hab das bisher immer so gelöst, dass ich bei fehlgeschlagenem InitSprite()
"DX7 or higher required" ausgebe.

Verfasst: 27.09.2006 16:16
von a14xerus
Das is mir klar ;-)
Habe auch schon nachgeguckt, ob man irgendwas mit dem rückgabewert machen kann, habe aber nichts gefunden, wäre eig auch doof, weil wenn einer DX 6 hat, ist der Wert ja 0

Also einen Direkten Befehl dazu habe ich noch nicht gefunden (sonst würd ich ja net fragen^^)

Verfasst: 27.09.2006 16:37
von Vallan
Es gibt ein DX Diagnose Tool. Das gibt es Villeicht als DLl. Schohn CodeArchiv geschaut?

Verfasst: 27.09.2006 16:41
von Kiffi
'dxdiag -?' in der Cmd eingeben. Die Infos, die das Ding ausgibt kann man in
eine Datei umleiten lassen und diese dann auslesen.

Andere Möglichkeit: In der Registry steht die Version. Einfach mal googlen.

Grüße ... Kiffi

Verfasst: 27.09.2006 17:30
von AND51
Kiffi hat geschrieben:'dxdiag -?' in der Cmd eingeben. Die Infos, die das Ding ausgibt kann man in
eine Datei umleiten lassen und diese dann auslesen.
KIFFI, du machst mich echt arbeitslos!!!

Das ist doch sonst immer meine Idee... :(

Aber keine Angst, ich habe eine bessere Idee!

Seit PB 4 kann man die Ausgabe doch direkt aus der Konsole auslesen (Parameter bei RunProgram() beachten)...

Verfasst: 28.09.2006 17:20
von Build0815
Hi. Ich hab mal schnell zum spaß eine "Quick & Dirty" Version zum ermitteln der DirectX Version und vielen anderen System Infos geschrieben die die Daten aus "DxDiag" holt. Wie gesagt war das eben nur ne schnelle Eingebung, und der Umstand dass ich noch nicht lange mit PB zutun habe, verusachen im Code wohl einige Geschwindigkeitsbremsen, und ich habe da auch gerade nicht darauf geachtet Speichereffizient zu schreiben und die ganzen Daten einfach kurzer Hand in einen String deponiert. <)

Das Ganze besteht aus zwei Prozeduren , die eine InitMySystemInfo() muss vorher aufgerufen werden und gibt einen String mit dem ganzen Kauderwelsch von DxDiag zurück. Die zweite Prozedur wertet das ganze aus indem man ihr einen string-command übergibt und gibt das Ergebnis als String zurück. Der Befehl um die DirectX version zu bekommen lautet hier "DirectX Version".

Andere Befehle sind ua.:

Machine name, Operating System, Language, System Manufacturer, System Model, BIOS, Processor, Memory, Page File, Windows Dir, DirectX Version, DX Setup Parameters, DxDiag Version, / Für Display Infos: Card name, Manufacturer, DAC type, Device Key, Display Memory, Current Mode, Monitor, Monitor Max Res, Driver Name, Driver Version, DDI Version, Driver Attributes, Driver Date/Size, Mini VDD, Device Identifier, Vendor ID, Device ID, SubSys ID, Revision ID, Video Accel, DDraw Status, D3D Status, AGP Status, ... und viele mehr. (Sind mir jetzt zu viele um alle zu posten)

(((Die ganzen "Befehle" findet man, wenn man zb. CMD öffnet und "DxDiag /t c:\infos.txt" ausführt, findet man dann in der textdatei sachen wie "DirectX Version: " vor, wovon sich die "Commands" in der Prozedur ableiten und um sie als Command zu verwenden muss man einfach nur den ":" weglassen und die Prozedur mit nur zb. "DirectX Version" aufrufen , um das Ergebnis der Einzelnen Infos in PB zu erhalten)))

Hier die Zwei Prozeduren. (Leider braucht die InitMySystemInfo Prozedur ca. 15 Sekunden auf meinem System mit eingeschaltetem Debugger zum laden der Daten aus DxDiag :lol: aber man muss sie nur einmal aufrufen um die Cache Daten entgegen zu nehmen. Voraussetzungen: DxDiag.exe muss vorhanden sein! Habe das ganze auf Windows XP Pro getestet.):

Code: Alles auswählen

Procedure.s InitMySystemInfo()

tempdir.s = GetTemporaryDirectory()
cache.s   =  ""

RunProgram("dxdiag", "/t " + tempdir + "getsysteminfo_gettmp000.tmp", "", #PB_Program_Wait | #PB_Program_Hide)

If ReadFile(0, tempdir + "getsysteminfo_gettmp000.tmp")
  
  Repeat
    cache = cache + ReadString(0) + Chr(1)
  Until Eof(0) = 1
  
  CloseFile(0)
  
  If DeleteFile(tempdir + "getsysteminfo_gettmp000.tmp")
  Else
    MessageRequester("", "Error!", 16)
  EndIf

Else
MessageRequester("", "Error!", 16)
EndIf

output.s = cache
ProcedureReturn output
EndProcedure
Und hier die andere die die gecachten Daten verwendet und die SystemInfos abruft (sagte ich schon, dass das ganze sehr ineffizent gemacht ist? :roll:):

Code: Alles auswählen

Procedure.s GetMySystemInfo(cache.s, command.s)
command = command + ": "
position.l = FindString(cache, command, 0)
output.s = ""
tmp.l
i.l = position
Repeat
  tmp = Asc(Mid(cache, i, 1))
  I=I+1
  cx=cx+1
Until tmp = 1

output = Mid(cache, position+Len(command), cx-1-Len(command))

ProcedureReturn output
EndProcedure
_______________

Einfach zB.: cache.s = InitMySystemInfo() aufrufen, dann Ergebnis.s = GetMySystemInfo(cache, "DirectX Version") und das ganze ist vollbracht ^_^. Hier ein ganzes Code Beispiel:

Code: Alles auswählen

OpenConsole()
Print("Initializing System Info...")

cache.s = InitMySystemInfo()

DxVersion.s = GetMySystemInfo(cache, "DirectX Version" )
OsVersion.s = GetMySystemInfo(cache, "Operating System")
Bios.s      = GetMySystemInfo(cache, "Bios"            )
Processor.s = GetMySystemInfo(cache, "Processor"       )
Memory.s    = GetMySystemInfo(cache, "Memory"          )

outputstr.s = "DirectX Version: " + DxVersion + Chr(13) + "Operating System: " + OsVersion + Chr(13) + "Bios: " + Bios + Chr(13) + "Processor: " + Processor + Chr(13) + "Memory: " + Memory
MessageRequester("System Information + DirectX Version", outputstr, 64)
End
(Sorry falls der Code an manchen Stellen durch das Forum Format in die nächste Zeile abgeknickt worden ist, lässt sich aber einfach im Editor wieder hinbiegen :mrgreen: )

Verfasst: 28.09.2006 17:25
von a14xerus
cool ( auch wenns den umweg über dxdiag nimmt, (vll [ code ] tags einfügen....

Code: Alles auswählen

;blablabla
Aber trotzdem wäre es cool, wenn einer einen einigermaßen direkten Befehl kennt

deswegen beschreibe ich den thread nicht als "gelöst"

Verfasst: 28.09.2006 17:30
von Build0815
Hmm ich denke nen direkten Befehl wissen nichtmal die Götter :D
.... Vielleicht könnte man es ja mal mit einer E-Mail an Bill Gates versuchen ... *hüstel* :roll:

Verfasst: 28.09.2006 17:45
von AND51
Respekt, dass du diesen Forum gleich mit so viel Mühe betrittst. :allright:
Willkommen an Bord!

Und das dein Code, wie du ja auch selbst sagst, nicht ganz so effizient ist, verzeihen wir dir ;-) jeder fängt mal klein an :D