| |
|
|
 |
Autor |
Nachricht |
 |
| |
|
|
| |
| Luckie |
#2| Verfasst am: 01.06.2007, 08:40 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Moderator Status: offline Beiträge: 30.058 angemeldet: 29.05.2002 Delphi 2006 Professional

|
Wo rufst du denn die Funktion auf?
BTW brauchst du das nicht alles selber zu deklarieren, steht schon alles in der Windows.pas. |
 Programmieren ist ein Rennen zwischen den Softwareentwicklern, die versuchen größere und bessere idiotensichere Programme zu schreiben und dem Universum, welches versucht größere und bessere Idioten zu produzieren. Zur Zeit liegt das Universum in Führung. |
 |
|
|
|
| |
| DeddyH |
#3| Verfasst am: 01.06.2007, 08:42 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 43 Status: offline Beiträge: 14.041 angemeldet: 17.09.2006 Wohnort: Barchfeld Delphi 2007 Professional

|
Das habe ich mich auch gefragt. |
 Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"
Idee := Brain.Activate(self); |
 |
|
|
|
| |
| RWarnecke |
#4| Verfasst am: 01.06.2007, 08:55 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
sehr aktives Mitglied Alter: 33 Status: offline Beiträge: 2.395 angemeldet: 31.12.2004 Wohnort: Stuttgart Delphi 2006 Professional

|
| Luckie hat folgendes geschrieben: | Wo rufst du denn die Funktion auf?
BTW brauchst du das nicht alles selber zu deklarieren, steht schon alles in der Windows.pas. |
Ich habe zuerst gedacht, das tue ich damit, wenn ich Status.ullTotalPhys aufrufe. Aber irgendwie scheint das ja nicht richtig zu sein. Ich muss ja den TMemoryStatusEx erst füllen oder nicht ? Aber wie fülle ich den ?
Ich möchte, dass er mit damit den physikalischen Arbeitsspeicher größer 2 GB anzeigt. |
 Code-Orakel 1.4.0 ; SystemInfo 1.6.5 ; Zeus 0.6.0
BIS Tipps & Tricks
Code-Orakel Online |
 |
|
|
|
| |
| DeddyH |
#5| Verfasst am: 01.06.2007, 09:04 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 43 Status: offline Beiträge: 14.041 angemeldet: 17.09.2006 Wohnort: Barchfeld Delphi 2007 Professional

|
Wenn ich das richtig verstanden habe, musst Du als erste Zeileeinfügen. |
 Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"
Idee := Brain.Activate(self); |
 |
|
|
|
| |
| Luckie |
#6| Verfasst am: 01.06.2007, 09:09 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Moderator Status: offline Beiträge: 30.058 angemeldet: 29.05.2002 Delphi 2006 Professional

|
TMemoryStatusEx ist doch nur ein Record, der irgendwo gefüllt werden muss:
Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · 29
| type
TMemoryStatusEx = packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: Int64;
ullAvailPhys: Int64;
ullTotalPageFile: Int64;
ullAvailPageFile: Int64;
ullTotalVirtual: Int64;
ullAvailVirtual: Int64;
ullAvailExtendedVirtual: Int64;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL; stdcall; external kernel32;
procedure TForm1.Button1Click(Sender: TObject);
var
Status: TMemoryStatusEx;
begin
ZeroMemory(@Status, SizeOf(TMemoryStatusEx));
Status.dwLength := SizeOf(TMemoryStatusEx);
GlobalMemoryStatusEx(Status);
Label1.Caption := 'Total RAM: ' + IntToStr(Status.ullTotalPhys);
Label2.Caption := 'Verfügbar RAM: ' + IntToStr(Status.ullAvailPhys);
Label3.Caption := 'Total Pagefile: ' + IntToStr(Status.ullTotalPageFile);
Label4.Caption := 'Verfügbar Pagefile: ' + IntToStr(Status.ullAvailPageFile);
Label5.Caption := 'Total Virtuell: ' + IntToStr(Status.ullTotalVirtual);
Label6.Caption := 'Verfügbar Virtuell: ' + IntToStr(Status.ullAvailVirtual);
end; |
| |
 Programmieren ist ein Rennen zwischen den Softwareentwicklern, die versuchen größere und bessere idiotensichere Programme zu schreiben und dem Universum, welches versucht größere und bessere Idioten zu produzieren. Zur Zeit liegt das Universum in Führung. |
 |
|
|
|
| |
| DeddyH |
#7| Verfasst am: 01.06.2007, 09:12 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
"Rüsselmops" ;-) Alter: 43 Status: offline Beiträge: 14.041 angemeldet: 17.09.2006 Wohnort: Barchfeld Delphi 2007 Professional

|
Jepp, so sollte es richtig sein. |
 Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"
Idee := Brain.Activate(self); |
 |
|
|
|
| |
|
|
| |
| NicoDE |
#9| Verfasst am: 01.06.2007, 10:09 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Beiträge: 1.663 angemeldet: 08.06.2002

|
| RWarnecke hat folgendes geschrieben: | | Hier zeigt er mit komischerweise immer 0 in den Labels an. | Die Definition von TMemoryStatusEx ist nicht korrekt (GetLastError gibt wahrscheinlich ERROR_INVALID_PARAMETER zurück ).
Man kann auch gleich die Fallback-Logik in eine eigene Funktion einbauen (anstatt sie immer wieder in der Anwendung zu implementieren): Delphi-Quellcode: | zusammenfalten | markieren | 1 · · · 5 · · · · 10 · · · · 15 · · · · 20 · · · · 25 · · · · 30 · · · · 35 · · · · 40 · · · · 45 · · 48
| function MyGlobalMemoryStatus(var ABuffer: TMemoryStatusEx): BOOL; stdcall;
type
TFNGlobalMemoryStatusEx = function(var ABuffer: TMemoryStatusEx): BOOL; stdcall;
const
FallbackSize = $38; // FieldOffset(TMemoryStatusEx, ullAvailExtendedVirtual)
{$WRITEABLECONST ON}
const
Initialized: Integer = 0;
FNMemStatEx: TFNGlobalMemoryStatusEx = nil;
{$WRITEABLECONST OFF}
var
Status: TMemoryStatus;
begin
if Initialized = 0 then
begin
FNMemStatEx := TFNGlobalMemoryStatusEx(
GetProcAddress(GetModuleHandle(kernel32), 'GlobalMemoryStatusEx'));
InterlockedIncrement(Initialized);
end;
if Assigned(FNMemStatEx) then
Result := FNMemStatEx(ABuffer)
else if ABuffer.dwLength < FallbackSize then
begin
SetLastError(ERROR_INVALID_PARAMETER);
Result := False;
end
else
begin
FillChar(Status, SizeOf(TMemoryStatus), 0);
GlobalMemoryStatus(Status);
Result := (Status.dwLength = SizeOf(TMemoryStatus));
if Result then
begin
FillChar(ABuffer, ABuffer.dwLength, 0);
ABuffer.dwLength := FallbackSize;
ABuffer.dwMemoryLoad := Status.dwMemoryLoad;
with ABuffer, Status do
begin
TULargeInteger(ullTotalPhys).LowPart := dwTotalPhys;
TULargeInteger(ullAvailPhys).LowPart := dwAvailPhys;
TULargeInteger(ullTotalPageFile).LowPart := dwTotalPageFile;
TULargeInteger(ullAvailPageFile).LowPart := dwAvailPageFile;
TULargeInteger(ullTotalVirtual).LowPart := dwTotalVirtual;
TULargeInteger(ullAvailVirtual).LowPart := dwAvailVirtual;
end;
end;
end;
end; |
| |
 "A wise spellweaver always writes in pencil." -- Book of Patterns
Zuletzt bearbeitet von NicoDE am 01.06.2007, 10:19, insgesamt 1-mal bearbeitet. |
 |
|
|
|
| |
| Dirkmswt |
#10| Verfasst am: 07.03.2008, 16:55 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Mitglied Alter: 31 Status: offline Beiträge: 55 angemeldet: 27.09.2006 Wohnort: Heppenheim

|
Du musst auch den Code vor den Labels übernehmen sonst wird der Wert auch immer 0 bleiben
Ich hab 4Gb Ram und die werden Korrekt angezeigt. |
|
 |
|
|
|
| |
| Friday |
#11| Verfasst am: 06.01.2009, 15:01 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 4 angemeldet: 06.05.2008

|
ich frag mich ja was
ullTotalPageFile: Int64;
ullAvailPageFile: Int64;
sind. Die ullTotalPageFile ist bei mir 3164 MB groß obwohl kein pagefile.sys existiert. Die größe von Pagefile.sys gibt ullTotalVirtual an. Tolle Namenskonvention
Aber was sind dann die 3164 MB und wo liegen sie? Gebraucht werden sie auch relativ kohärent zur Ram-Auslastung, aber dennoch nicht identisch. Interessant auch wenn ich ein pagefile anlege, wird die Größe dazu addiert. Also scheint
ullTotalPageFile = ullTotalVirtual + x
zu gelten. Die Frage ist nur was ist x. |
|
 |
|
|
|
| |
|
|
| |
| Friday |
#13| Verfasst am: 07.01.2009, 03:23 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Mitglied Status: offline Beiträge: 4 angemeldet: 06.05.2008

|
bei dem Thread gehts soweit ich gelsen habe nur um die Verwendung bzw Konfiguration von pagfile.sys, was bei TMemoryStatusEx ullTotalVirtual entspricht, erklärt aber nicht ullTotalPageFile, was bei mir wie erwähnt bei deaktiviertem und somit nicht vorhandenem pagefile.sys über 3GB groß ist. |
|
 |
|
|
|
| |
| Sunlight7 |
#14| Verfasst am: 07.01.2009, 03:27 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Mitglied Beiträge: 1.473 angemeldet: 17.09.2006 Wohnort: Delphi32.exe Delphi 5 Standard

|
In dem Thread, zumindest am Ende gings darum, das der Task-Manager eine Auslagerungsdateibenutzung anzeigt, obwohl ich diese deaktiviert habe. |
 Links: Suns Traffic Monitor, "Zerbrösel" Tetris
Windows: Ja - Microsoft: Nein -> www.ReactOS.org |
 |
|
|
|
| |
| nicodex |
#15| Verfasst am: 07.01.2009, 09:21 Titel: Re: GlobalMemoryStatus bz.w GlobalMemoryStatusEx |
 |
 |
 |
|
Mitglied Alter: 35 Beiträge: 284 angemeldet: 02.01.2008 Wohnort: Darmstadt Delphi 2007 Professional

|
| Sunlight7 hat folgendes geschrieben: | | In dem Thread, zumindest am Ende gings darum, das der Task-Manager eine Auslagerungsdateibenutzung anzeigt, obwohl ich diese deaktiviert habe. | Soweit ich mich erinnere, verwendet Windows trotzdem/automatisch die Auslagerungsdatei für das System-Volume. |
 Ambermoon-Soundtrack-CD Preorder-Page
Generic Properties for Blender Library Data |
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|