DirectX Version

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

DirectX Version

Beitrag von a14xerus »

Hi Leute, gibt es einen Befehl, mit dem man die DirectX Version zurückgeben kann?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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^^)
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Es gibt ein DX Diagnose Tool. Das gibt es Villeicht als DLl. Schohn CodeArchiv geschaut?
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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)...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Build0815
Beiträge: 4
Registriert: 27.09.2006 16:36

Beitrag 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: )
Zuletzt geändert von Build0815 am 28.09.2006 21:25, insgesamt 2-mal geändert.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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"
Build0815
Beiträge: 4
Registriert: 27.09.2006 16:36

Beitrag 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:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten