![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему выдается не правильный размер файла:(
No_Dead © (2008-04-26 19:41:00)Не могу сообразить.
Вот код
Wnd:hwnd;
buff: ARRAY [0𠠇] OF Char;
pmc: PPROCESS_MEMORY_COUNTERS;
cb: Integer;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd 0 DO begin
if (Wnd Application.Handle) and
(GetWindowText(Wnd, buff, sizeof(buff)) 0)
then
begin
GetWindowText(Wnd, buff, sizeof(buff));
GetWindowThreadProcessId(Wnd);
ListBox1.Items.Add(StrPas(buff)+' '+inttostr(GetWindowThreadProcessId(Wnd)));
cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
GetMem(pmc, cb);
pmc^.cb := cb;
if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then
ListBox1.Items.Add(floattostr((pmc^.WorkingSetSize)/1024) + ' Bytes')
else ListBox1.Items.Add('+++');
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
ListBox1.ItemIndex := 0;
end;
ЗЫ. задача такая: как в диспечере задач отобразить процесс и объем его в памяти.
Игорь (2008-04-26 21:09:00) [1]
> No_Dead © (26.04.08 20:49) [7]
Да сморозил я хрень какую то, вот рабочий код
var
Wnd:hwnd;
buff: ARRAY [0..MAX_PATH] OF Char;
pmc: PPROCESS_MEMORY_COUNTERS;
cb: Integer;
PrHandle: THandle;
prId: THandle;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 DO begin
if (Wnd <> Application.Handle) and
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
then
begin
GetWindowText(Wnd, buff, sizeof(buff));
GetWindowThreadProcessId(Wnd, prId);
PrHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, prId);
ListBox1.Items.Add(StrPas(buff)+' '+inttostr(prId));
cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
GetMem(pmc, cb);
pmc^.cb := cb;
if GetProcessMemoryInfo(PrHandle, pmc, cb) then
ListBox1.Items.Add(floattostr((pmc^.WorkingSetSize)/1024) + ' Bytes')
else ListBox1.Items.Add('+++');
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
ListBox1.ItemIndex := 0;
No_Dead (2008-04-26 20:49:00) [2]> [6] Игорь © (26.04.08 20:47)
выдает +++ вместо размера, если вставить твой код
No_Dead (2008-04-26 20:47:00) [3]> [4] Игорь © (26.04.08 20:41)
вместо GetCurrentProcess нужно id процесса передавать же?
так я понимаю?
Игорь (2008-04-26 20:47:00) [4]
var
PrHandle: THandle;
---
PrHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, GetWindowThreadProcessId(Wnd));
if GetProcessMemoryInfo(PrHandle, pmc, cb) then
Игорь (2008-04-26 20:41:00) [5]
if GetProcessMemoryInfo( GetCurrentProcess(), pmc, cb) then
GetCurrentProcessтолько для своего процесса получаешь память
No_Dead (2008-04-26 20:37:00) [6]> [2] No_Dead © (26.04.08 20:36)
> > [1] Сергей М, (26.04.08 20:22)
> >
> > > buff: ARRAY [0??] OF Char;
> >
> >
> > Это что за абракадабра ?
>
> хмююю 0?? не скопировалось%>
> buff: ARRAY [0??] OF Char;
ппц%)
0 127
No_Dead (2008-04-26 20:36:00) [7]> [1] Сергей М, (26.04.08 20:22)
>
> > buff: ARRAY [0??] OF Char;
>
>
> Это что за абракадабра ?
хмююю 0𠠇 не скопировалось%>
buff: ARRAY [0𠠇] OF Char;
Сергей М, (2008-04-26 20:22:00) [8]
> buff: ARRAY [0 𠠇] OF Char;
Это что за абракадабра ?