sleepy Einsteiger
Registriert seit: 12.2007 Beiträge:2
| C++ Speicher Tut2 Hallo!
Ich versuche seit ein paar Tagen ein Programm zu schreiben, dass den Speicher einer Anwendung überwacht. Sprich ich möchte die Größe des benutzten Speichers herausfinden.
Ich habe auch die Tutorials 1+2 gemacht.(zwar nicht alles 100% verstanden, aber sonst sehr NICE).
Aber hier jetzt meine Frage:
Ich kann zwar mein Fenster finden. und auch die ID bestimmen. Aber woher
weiss ich die Speichergröße/n nach der ich suchen muss? Also ich möchte ja den Speicher der gesamten Applikation haben und nicht einer einzelnen
Variable.
Ich hoffe die Frage ist richtig und verständlich gestellt
Gruß Sleepy
|
sleepy Einsteiger
Registriert seit: 12.2007 Beiträge:2
| C++ Speicher Tutorial 2 Ich hab nochmal ein wenig gesucht und auch eine Lösung gefunden.
Falls es jemanden interessiert:
Code:
HWND hWnd;
HANDLE hProc;
DWORD ProcID;
DWORD Rw = 0;
unsigned adrStart = 0x00000000;
unsigned adrEnd = 0x80000000;
unsigned char buffer[4096];
unsigned long iBytesRead=0;
unsigned int ProcSize;
MEMORY_BASIC_INFORMATION mbi;
hWnd = FindWindowA(0, "MeinFenster");
if(!hWnd)
return ;
GetWindowThreadProcessId(hWnd, &ProcID);
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
adrEnd = 0x80000000;
ProcSize = 0;
for(; adrStart<adrEnd; adrStart+=4096)
{
VirtualQueryEx(hProc, (LPCVOID)adrStart,&mbi,4096);
if(mbi.State==MEM_COMMIT)
{
if(ReadProcessMemory(hProc,(LPCVOID)adrStart,&buffer, sizeof(buffer),&ProcID))
{
ProcSize++;
}
}
iBytesRead+=4096;
}
ProcSize = ProcSize *0.004048f;
So komme ich dann an den belegten Speicher des Prozesses. ProcSize liefert mir eine Angabe in MB. Das Ganze ist zwar etwas umständlich, da ich den gesamten Speicher (2GB) durchscanne, aber ich bekomme mein Ergebnis :)
Edit: Code tags eingefügt
Gruß Sleepy Dieser Beitrag wurde zuletzt am 23.01.2008 15:35 von Simon editiert.
|