Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Größe des installierten Arbeitsspeichers ermitteln (https://www.delphipraxis.net/167912-groesse-des-installierten-arbeitsspeichers-ermitteln.html)

sundance 25. Apr 2012 11:02

Größe des installierten Arbeitsspeichers ermitteln
 
Gibt es eine verlässliche Möglichkeit, die Größe des installierten Arbeitsspeichers programmatisch (auf 32- und 64-Bit-Systemen) festzustellen?
Anders als der Name vermuten lässt liefert die API-Funktion GlobalMemoryStatusEx() im Strukturelement "ullTotalPhys: Int64" auf einem 32-Bit Windows 7 mit installierten 4 GB "nur" die maximal nutzbaren 3.5 GB:
Code:
typedef struct _MEMORYSTATUSEX {
  DWORD    dwLength;
  DWORD    dwMemoryLoad;
  DWORDLONG ullTotalPhys;
  DWORDLONG ullAvailPhys;
  DWORDLONG ullTotalPageFile;
  DWORDLONG ullAvailPageFile;
  DWORDLONG ullTotalVirtual;
  DWORDLONG ullAvailVirtual;
  DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
Per WMI könnte man von der Kommandozeile aus die installierten Speicherbänke abfragen:
Code:
WMIC memorychip

Capacity    CreationClassName    DataWidth  Description             DeviceLocator
2147483648  Win32_PhysicalMemory 64         Physikalischer Speicher XMM1
2147483648  Win32_PhysicalMemory 64         Physikalischer Speicher XMM3
4194304     Win32_PhysicalMemory 2          Physikalischer Speicher SYSTEM ROM
Ich habe zwar den WMI-Class Code Generator schon mal (für einfache Abfragen) ausprobiert, aber bei obiger Abfrage komme ich nicht klar...

Gibt es eine API-Funktion, die den physikalisch installierten Arbeitsspeicher ermitteln kann oder vielleicht hat jemand einen Tipp, wie ich das mit dem WMI-Codegenerator bewerkstelligen kann?

.sundance.

jfheins 25. Apr 2012 11:14

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Probier' mal das hier: http://msdn.microsoft.com/en-us/libr...58(VS.85).aspx
(via StackOverflow)

sundance 25. Apr 2012 11:25

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Funktioniert perfekt, allerdings erst ab Vista...
Ich bräuchte eine Lösung, die auch auf XP noch funktioniert (sorry, hab ich vergessen anzugeben...)

[edit] unter XP funktioniert "WMIC memorychip" allerdings auch nicht.

.sundance.

Bernhard Geyer 25. Apr 2012 11:33

AW: Größe des installierten Arbeitsspeichers ermitteln
 
XP wurde doch fast nie mit 4 GB verkauft?
Und wenn dein Programm auch unter XP laufen soll einfach die entsprechenden switch im Programmcode einführen das hier die alte Funktion verwendet wird und ab Vista (SP1) die neue Funktion.

sundance 25. Apr 2012 12:19

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Zitat:

XP wurde doch fast nie mit 4 GB verkauft?
In Vorbereitung auf Windows 7 wurden viele der PCs in unserer Firma auf 4 GB aufgerüstet...
Zitat:

...einfach die entsprechenden switch im Programmcode einführen das hier die alte Funktion verwendet wird und ab Vista (SP1) die neue Funktion
Leider liefert unter XP auch die "alte" Funktion nur den verfügbaren Arbeitsspeicher, also 3.5 GB.

Morphie 25. Apr 2012 12:27

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Die Lösung mit WMI:
http://www.delphipraxis.net/79883-ra...tml#post550371

Bernhard Geyer 25. Apr 2012 12:33

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Zitat:

Zitat von sundance (Beitrag 1163482)
Zitat:

XP wurde doch fast nie mit 4 GB verkauft?
In Vorbereitung auf Windows 7 wurden viele der PCs in unserer Firma auf 4 GB aufgerüstet...
Zitat:

...einfach die entsprechenden switch im Programmcode einführen das hier die alte Funktion verwendet wird und ab Vista (SP1) die neue Funktion
Leider liefert unter XP auch die "alte" Funktion nur den verfügbaren Arbeitsspeicher, also 3.5 GB.

Und? Was stört dich jetzt daran? Wenns Firmenintern ist dann zeig doch 4GB in diesem Fall an.

himitsu 25. Apr 2012 13:08

AW: Größe des installierten Arbeitsspeichers ermitteln
 
Wenn's ein 32 Bit-XP ist, dann isses auch egal, denn ohne PAE und Co. kann Windows eh nicht mehr als 4 GB verwalten/ansprechen/benutzen.
Wieso sollte es dem Programm dann sagen "nja, theoretisch sind hier 64 GB verbaut, aber nutzen kannst'e dennoch nur 3,5 :tongue:" ?

Wenn du den realen RAM wissen willst, dann kommst'e um iene Abfrage der RAM-Riegel wohl nicht drumrum. (das BIOS, Graka und Co. können sich da schließlich auch schon was gemopst haben, bevor Windows da geladen war)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz