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

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?

):
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

)