Ha ich habe doch noch ein System gefunden, das weniger VRAM hat. Mein neuer Lappi hat ja eine AMD APU. Und hier ist direkt eine Überraschung. Egal was ich mache zeigt er mir immer 0 an. Egal mit welchem Code hier. Denn die APU ist nicht im Schlüssel 0000, sondern unter 0001 hinterlegt. Selbst über die Registry ist das ganze nicht konsistent. Weder was die Zahlen angeht, noch wo die Daten in der Registry hinterlegt sind. Da müsste nach der ersten Abfrage überprüft werden, ob das Ergebnis größer 0 ist. Wenn nicht, muss er sich den Schlüssel 0001 noch einmal holen.
@al90: DIese Lösung ist die erste, die ich gepostet habe. Das Abrunden der If-Abfrage findet praktisch immer statt. Es sei denn jemand hat weniger als 1 MB VRAM. Dann kannste das auch weglassen und die letzten 1024 wieder in die erste Zeile hinter den anderen beiden einsetzen. Und Stargate hat wieder weniger als 6GB
Ich weiß ja nicht, wie wichtig das ist. Aber ich würde es mit der einfachsten mir bekannten Methode machen. Mit dxdiag /x
einfach über RunProgram eine XML Datei erstellen, diese mit der XML-Lib parsen lassen und mir da alle Infos herausholen. Da steht eigentlich alles drin. Auch die RAM Daten. Außerdem kannst du damit die Systeminfos puffern und musst diese nicht jedes mal neu aus dem System fischen.
EDIT: Oder man lässt die letzten 1024 weg und zeigt sie in MB an. Dann müsste es ja auch bei Stargate passen. So funktioniert es anscheinend jetzt bei mir:
Code: Alles auswählen
Procedure.s ReadRegKey(OpenKey.i,SubKey.s,ValueName.s,Type.i=1)
hKey.i=0
DataSize.i=255
keyvalue$=""
mem=AllocateMemory(1024)
If mem
If RegOpenKeyEx_(OpenKey,SubKey,0,#KEY_READ,@hKey)
keyvalue$="Error"
Else
If RegQueryValueEx_(hKey,ValueName,0,0,mem,@DataSize)
keyvalue$="Error"
Else
If Type=0
keyvalue$=Str(PeekI(mem))
ElseIf Type=1
keyvalue$=PeekS(mem)
EndIf
EndIf
RegCloseKey_(hKey)
EndIf
FreeMemory(mem)
EndIf
ProcedureReturn keyvalue$
EndProcedure
Procedure.s GetComputerName()
a$=ComputerName()
ProcedureReturn a$
EndProcedure
Procedure.s GetProcessorName()
a$=CPUName()
ProcedureReturn a$
EndProcedure
Procedure.s GetProcessorSpeed()
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System\CentralProcessor\0","~MHz",0)
If a$=""
a$="<Unbekannt>"
EndIf
ProcedureReturn a$
EndProcedure
Procedure.s CountProcessorCores()
x=CountCPUs()
ProcedureReturn Str(x)
EndProcedure
Procedure.s GetProcessorArchitecture()
a$=GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
If a$=""
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_ARCHITECTURE")
EndIf
If a$=""
a$="<Unbekannt>"
EndIf
ProcedureReturn a$
EndProcedure
Procedure.s GetProcessorIdentifier()
a$=GetEnvironmentVariable("PROCESSOR_IDENTIFIER")
If a$=""
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_IDENTIFIER")
EndIf
If a$=""
a$="<Unbekannt>"
EndIf
ProcedureReturn a$
EndProcedure
Procedure.s GetProcessorLevel()
a$=GetEnvironmentVariable("PROCESSOR_LEVEL")
If a$=""
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_LEVEL")
EndIf
If a$=""
a$="<Unbekannt>"
EndIf
ProcedureReturn a$
EndProcedure
Procedure.s GetProcessorRevision()
a$=GetEnvironmentVariable("PROCESSOR_REVISION")
If a$=""
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_REVISION")
EndIf
If a$=""
a$="<Unbekannt>"
EndIf
ProcedureReturn a$
EndProcedure
Procedure.s GetGraphicCardName()
Protected device.DISPLAY_DEVICE
Protected settings.DEVMODE
device\cb = SizeOf(DISPLAY_DEVICE)
settings\dmSize = SizeOf(DEVMODE)
EnumDisplayDevices_(#Null,#Null,device,#Null)
a$=PeekS(@device\DeviceString)
If a$=""
a$=ReadRegKey(#HKEY_LOCAL_MACHINE,"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0001","DriverDesc")
If a$=""
a$="<Unbekannt>"
EndIf
EndIf
ProcedureReturn a$
EndProcedure
Procedure.i GetTotalInstalledMemory()
Protected Info.MEMORYSTATUS
Info\dwLength = SizeOf(MEMORYSTATUS)
GlobalMemoryStatus_(@Info)
ProcedureReturn Info\dwTotalPhys
EndProcedure
Procedure.i GetTotalFreeMemory()
Protected Info.MEMORYSTATUS
Info\dwLength = SizeOf(MEMORYSTATUS)
GlobalMemoryStatus_(@Info)
ProcedureReturn Info\dwAvailPhys
EndProcedure
Procedure.i GetTotalUsedMemory()
Protected Info.MEMORYSTATUS
Info\dwLength = SizeOf(MEMORYSTATUS)
GlobalMemoryStatus_(@Info)
ProcedureReturn Info\dwTotalPhys-Info\dwAvailPhys
EndProcedure
Procedure Show_SystemInformations()
a$=GetComputerName()
Window_0 = OpenWindow(#PB_Any, 420, 134, 640, 551, "Syseminformationen für "+a$, #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If Window_0
fnt=LoadFont(#PB_Any,"verdana",10,#PB_Font_HighQuality)
SetGadgetFont(#PB_Default,FontID(fnt))
Button_1 = ButtonGadget(#PB_Any, 503, 508, 116, 30, "Schließen")
Container_0 = ContainerGadget(#PB_Any, 21, 19, 598, 477, #PB_Container_Raised)
Frame_1 = FrameGadget(#PB_Any, 21, 23, 551, 216, "CPU")
Text_1 = TextGadget(#PB_Any, 36, 41, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_2 = TextGadget(#PB_Any, 36, 68, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_3 = TextGadget(#PB_Any, 36, 95, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_4 = TextGadget(#PB_Any, 36, 122, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_5 = TextGadget(#PB_Any, 36, 149, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_6 = TextGadget(#PB_Any, 36, 176, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_7 = TextGadget(#PB_Any, 36, 203, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Frame_2 = FrameGadget(#PB_Any, 21, 250, 551, 78, "GPU")
Text_8 = TextGadget(#PB_Any, 36, 268, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_12 = TextGadget(#PB_Any, 36, 295, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Frame_3 = FrameGadget(#PB_Any, 21, 344, 551, 108, "Arbeitsspeicher (Physikalisch)")
Text_9 = TextGadget(#PB_Any, 36, 362, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_10 = TextGadget(#PB_Any, 36, 389, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
Text_11 = TextGadget(#PB_Any, 36, 416, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
SetGadgetColor(Text_1, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_2, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_3, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_4, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_5, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_6, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_7, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_8, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_9, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_10, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_11, #PB_Gadget_BackColor, $cccccc)
SetGadgetColor(Text_12, #PB_Gadget_BackColor, $cccccc)
SetGadgetText(Text_1, GetProcessorName())
SetGadgetText(Text_2, GetProcessorSpeed()+" Mhz")
SetGadgetText(Text_3, CountProcessorCores()+" Cores")
SetGadgetText(Text_4, "Architecture: "+GetProcessorArchitecture())
SetGadgetText(Text_5, "Revision: "+GetProcessorRevision())
SetGadgetText(Text_6, "Identifier: "+GetProcessorIdentifier())
SetGadgetText(Text_7, "Level: "+GetProcessorLevel())
SetGadgetText(Text_8, GetGraphicCardName())
x=GetTotalInstalledMemory()/1024/1024
If (x/2)*2<>x : x+1 : EndIf
SetGadgetText(Text_9, "Gesamtspeicher: "+Str(x)+" MB")
x=GetTotalFreeMemory()/1024/1024
SetGadgetText(Text_10, "Freier Speicher: "+Str(x)+" MB")
x=GetTotalUsedMemory()/1024/1024
SetGadgetText(Text_11, "Belegter Speicher: "+Str(x)+" MB")
x = Val(ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000","HardwareInformation.qwMemorySize",0))/1024/1024
If x = 0
x = Val(ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0001","HardwareInformation.qwMemorySize",0))/1024/1024
EndIf
SetGadgetText(Text_12, Str(x) +" MB Video-Memory")
CloseGadgetList()
EndIf
Repeat
Event=WaitWindowEvent()
If Event=#PB_Event_Gadget
gad=EventGadget()
Else
gad=0
EndIf
If gad=Button_1
Break
EndIf
Until Event=#PB_Event_CloseWindow
EndProcedure
Show_SystemInformations()