![]() |
Frage zu GetProcessMemoryInfo
Hi,
weis jemand warum da nur Schrott rauskommt?
Delphi-Quellcode:
Oder muss ich noch irgendwie Speicher zuweisen oder sowas?
function TfoMain.ShowMemoryUsage(ProcessId: DWORD): DWORD;
var hProcess: THandle; PMC: TProcessMemoryCounters; begin Result := 0; hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId); try begin if ( hProcess = 0 ) then Exit; if ( GetProcessMemoryInfo(hProcess, @PMC, SizeOf(PMC)) ) then Result := PMC.cb; end; finally CloseHandle(hProcess); end; end; Danke! |
Re: Frage zu GetProcessMemoryInfo
Delphi-Quellcode:
wird zu ->
Result := PMC.cb;
Delphi-Quellcode:
Result := PMC.WorkingSetSize;
|
Re: Frage zu GetProcessMemoryInfo
Hi,
dank dir. Mein Code sieht jetzt so aus:
Delphi-Quellcode:
und ich bekomme diesen Fehler:
function TfoMain.ShowMemoryUsage(ProcessId: DWORD): DWORD;
var hProcess: THandle; PMC: PPROCESS_MEMORY_COUNTERS; cb: Integer; begin Result := 0; cb := SizeOf(PMC); GetMem(PMC, cb); try PMC^.cb := cb; hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId); begin if ( hProcess = 0 ) then Exit; if ( GetProcessMemoryInfo(hProcess, @PMC, SizeOf(PMC)) ) then Result := (PMC^.WorkingSetSize Div 1024) else ShowMessage(SysErrorMessage(GetLastError)); end; finally CloseHandle(hProcess); FreeMem(PMC, SizeOf(_PROCESS_MEMORY_COUNTERS)); end; end; Zitat:
|
Re: Frage zu GetProcessMemoryInfo
Hallo Tobias,
du hast von einer statischen Struktur (TProcessMemoryCounters) auf eine dynamische (PProcessMemoryCounters) umgestellt, aber in deinem Code geht es etwas durcheinander. Probiere es mal so:
Delphi-Quellcode:
Grüße vom marabu
function TfoMain.ShowMemoryUsage(ProcessId: DWORD): DWORD;
var hProcess: THandle; PMC: PPROCESS_MEMORY_COUNTERS; cb: Integer; begin Result := 0; // cb := SizeOf(PMC); // = 4; cb := SizeOf(PMC^); GetMem(PMC, cb); try PMC^.cb := cb; hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId); begin if ( hProcess = 0 ) then Exit; // if ( GetProcessMemoryInfo(hProcess, @PMC, SizeOf(PMC)) ) then if ( GetProcessMemoryInfo(hProcess, PMC, SizeOf(PMC^)) ) then Result := (PMC^.WorkingSetSize Div 1024) else ShowMessage(SysErrorMessage(GetLastError)); end; finally CloseHandle(hProcess); FreeMem(PMC, SizeOf(_PROCESS_MEMORY_COUNTERS)); end; end; |
Re: Frage zu GetProcessMemoryInfo
Hallo Marabu,
kannst du mir mal erklaeren warum du die Veraenderungen gemacht hast? Ich verstehe das irgendwie jetzt nicht so recht. Ich muss auch zugeben ich habe diese Veraenderung von TProcessMemoryCounters nach PPROCESS_MEMORY_COUNTERS gemacht ohne es wirklich verstanden zu haben. War mehr Trial & Error. Hats du mir da vlt. eine kurze Erklaerung was denn der Unterschied ist von eben TProcessMemoryCounters und PPROCESS_MEMORY_COUNTERS? Danke |
Re: Frage zu GetProcessMemoryInfo
Zwar stehen mir die Header unter D7 nicht zur Verfügung, aber alleine aufgrund der Namenskonvention handelt es sich bei TMemoryProcessCounters um einen Record, während PProcessMemoryCounters ein Zeiger auf einen solchen Record darstellt. SizeOf(PMC) ist also die Größe eines Zeigers (4), während du die Größe der Struktur benötigst - SizeOf(PMC^), denn der Zeiger dürfte so deklariert worden sein:
Delphi-Quellcode:
marabu
type
PProcessMemoryCounters = ^TProcessMemoryCounters; TProcessMemoryCounters = record end; |
Re: Frage zu GetProcessMemoryInfo
Ah,
vielen Dank. Ich bin grad dran die Sache mit den Zeigern und co. zu lernen :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz