DirectX Version
DirectX Version
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
KIFFI, du machst mich echt arbeitslos!!!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.
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 EndHi. 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
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.):
Und hier die andere die die gecachten Daten verwendet und die SystemInfos abruft (sagte ich schon, dass das ganze sehr ineffizent gemacht ist?
):
_______________
Einfach zB.: cache.s = InitMySystemInfo() aufrufen, dann Ergebnis.s = GetMySystemInfo(cache, "DirectX Version") und das ganze ist vollbracht ^_^. Hier ein ganzes Code Beispiel:
(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
)
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
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
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
Zuletzt geändert von Build0815 am 28.09.2006 21:25, insgesamt 2-mal geändert.
cool ( auch wenns den umweg über dxdiag nimmt, (vll [ code ] tags einfügen....
Aber trotzdem wäre es cool, wenn einer einen einigermaßen direkten Befehl kennt
deswegen beschreibe ich den thread nicht als "gelöst"
Code: Alles auswählen
;blablabladeswegen beschreibe ich den thread nicht als "gelöst"
Respekt, dass du diesen Forum gleich mit so viel Mühe betrittst.
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 
Willkommen an Bord!
Und das dein Code, wie du ja auch selbst sagst, nicht ganz so effizient ist, verzeihen wir dir
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End