AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Größe des installierten Arbeitsspeichers ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Größe des installierten Arbeitsspeichers ermitteln

Ein Thema von sundance · begonnen am 25. Apr 2012 · letzter Beitrag vom 25. Apr 2012
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 11:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 11:14
Probier' mal das hier: http://msdn.microsoft.com/en-us/libr...58(VS.85).aspx
(via StackOverflow)
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#3

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 11:25
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.

Geändert von sundance (25. Apr 2012 um 11:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 11:33
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#5

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 12:19
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.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#6

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 12:27
Die Lösung mit WMI:
http://www.delphipraxis.net/79883-ra...tml#post550371
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 12:33
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Größe des installierten Arbeitsspeichers ermitteln

  Alt 25. Apr 2012, 13:08
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 " ?

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)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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