Seite 1 von 3

Wie Grafikkarten Speicher ermitteln ?

Verfasst: 02.07.2022 18:35
von al90
Hi,

Wie der Titel schon sagt suche ich nach einer lösung die Größe des Arbeitsspeichers zu ermitteln.
In der Registry bin ich leider nicht fündig geworden. Bin für jeden Tipp Dankbar :allright:

Ciao
AL90

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 10:08
von ccode_new
Hallo!

Versuche das hier mal:
Windows-Version:

Code: Alles auswählen

; wmic PATH win32_videocontroller GET description
; wmic PATH win32_videocontroller GET adapterram
; wmic PATH win32_videocontroller GET driverversion
; wmic PATH win32_videocontroller GET pnpdeviceid

Define.i GPUInfo
GPUInfo = RunProgram("wmic", "PATH win32_VideoController GET adapterram", "", #PB_Program_Open | #PB_Program_Read)
Output$ = ""
If GPUInfo
  While ProgramRunning(GPUInfo)
    If AvailableProgramOutput(GPUInfo)
      Output$ + ReadProgramString(GPUInfo, #PB_Unicode) + Chr(13)
    EndIf
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(GPUInfo))
  
  CloseProgram(GPUInfo)
EndIf

;VRAM in Mb
Debug StringField(Output$, 1, Chr(13))
Debug (Val(StringField(Output$, 2, Chr(13))) / 1024)/1024
Anbei:
Unter MacOs könnte man das hier probieren:
RunProgram("system_profiler", "SPDisplaysDataType", "", #PB_Program_Open | #PB_Program_Read)

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 10:36
von STARGÅTE
Hm, zunächst erhalte ich nur Müll. Mit ReadProgramString(GPUInfo, #PB_Ascii) statt #PB_Unicode erhalte ich zumindest eine Ausgabe, diese ist jedoch nicht richtig:
AdapterRAM
4095
Meine Grafikkarte hat 6 GB.

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 11:07
von ccode_new
Hallo STARGÅTE,

die Ausgabe von "wmic" scheint nicht zuverlässig genug zu sein.

Ich erhalte mit #PB_Ascii und #PB_UTF8 nur Müll, mit #PB_Unicode bekomme ich die korrekte Ausgabe.

Bei einer internen Intel-Chip - Grafikkarte stimmt die VRAM Angabe absolut genau.

Für Nvidia oder ATI werden glaube ich weite Plugins benötigt, oder es geht nur über spezielle Treiber.

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 12:07
von Kiffi
Hier gibt's Code zum Ausprobieren: WMI Queries for Hardware
Note: Win32_VideoController's UInt32 property AdapterRAM cannot return values exceeding 4GB.

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 13:44
von al90
@Kiffi

Jauw, Super das funktioniert. Danke Dir :allright:
Ich musste aber auch die Konstante auf #pb_AscII setzen, ansonsten wurden nur Hieroglyphen angezeigt.
Aber ansonsten klappt es sehr gut auf meinen MiniPC. CPU+GPU in einem. Zeigt mir 512 MB an. Also genu so
wie ich es auch erwartet habe. <)

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 13:58
von al90
Ich bin gerade dabei ein SysInfoPanel mit einer übersicht für mein aktuelles Project zusammenzustellen.
Für das meiste wurde ich im Inet auch fündig. Nur für den GraKa RAM konnte ich da nichts finden.
Ich poste mal hier den Code. Sicherlich können andere das evtl. auch gebrauchen. Der Kerncode ist
natürlich noch nicht fertig. Kann bestimmt noch einiges verbessert/geändert werden. Aber insoweit
Funktioniert es schonmal soweit. :wink:

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,"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000","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, 56, "GPU")
      Text_8 = TextGadget(#PB_Any, 36, 268, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
      Frame_3 = FrameGadget(#PB_Any, 21, 317, 551, 124, "Arbeitsspeicher (Physikalisch)")
      Text_9 = TextGadget(#PB_Any, 36, 335, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
      Text_10 = TextGadget(#PB_Any, 36, 362, 522, 25, "", #PB_Text_Border|#PB_Text_Center)
      Text_11 = TextGadget(#PB_Any, 36, 389, 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)
      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/1024
      If (x/2)*2<>x : x+1 : EndIf
      SetGadgetText(Text_9, "Gesamtspeicher: "+Str(x)+" GB")
      x=GetTotalFreeMemory()/1024/1024/1024
      SetGadgetText(Text_10, "Freier Speicher: "+Str(x)+" GB")
      x=GetTotalUsedMemory()/1024/1024/1024
      SetGadgetText(Text_11, "Belegter Speicher: "+Str(x)+" GB")
    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()

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 17:24
von ccode_new
Könnt ihr das hier:

Code: Alles auswählen

;Tested under Windows 11 -Version 21H2 (Build 22000.675)

Define.i GPUInfo
GPUInfo = RunProgram("reg", "query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0001 /v HardwareInformation.qwMemorySize", "", #PB_Program_Open | #PB_Program_Read)
Output$ = ""
If GPUInfo
  While ProgramRunning(GPUInfo)
    If AvailableProgramOutput(GPUInfo)
      Output$ + ReadProgramString(GPUInfo, #PB_Ascii) + Chr(13)
    EndIf
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(GPUInfo))
  
  CloseProgram(GPUInfo)
EndIf

;Debug Output$
field$ = StringField(Output$, 3, Chr(13))
field2$ = StringField(field$, 13, Chr(32))

VMem.q =  Val("$"+RemoveString(field2$, "0x"))

;VRam in Mb
Debug ((VMem / 1024) / 1024)
mal testen?

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 18:26
von STARGÅTE
Ergibt bei mir 0 mit dem Exitcode 1

Re: Wie Grafikkarten Speicher ermitteln ?

Verfasst: 03.07.2022 19:08
von TroaX
Versuch es mal so (etwas lang, weil ich jetzt keine Zeit hatte, eine ReadRegKeyInt) zu bauen. Da kommen bei mir 8 GB raus (3060 TI mit 8 GB):

Code: Alles auswählen

Str(Val(ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000","HardwareInformation.qwMemorySize",0))/1024/1024/1024)
Hier dein Sysinfo:

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/1024
      If (x/2)*2<>x : x+1 : EndIf
      SetGadgetText(Text_9, "Gesamtspeicher: "+Str(x)+" GB")
      x=GetTotalFreeMemory()/1024/1024/1024
      SetGadgetText(Text_10, "Freier Speicher: "+Str(x)+" GB")
      x=GetTotalUsedMemory()/1024/1024/1024
      SetGadgetText(Text_11, "Belegter Speicher: "+Str(x)+" GB")
      SetGadgetText(Text_12, Str(Val(ReadRegKey(#HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\0000","HardwareInformation.qwMemorySize",0))/1024/1024/1024) +" GB 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()
Viel Spaß damit ;)