Форум: "Система";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизМонитор ресурсов ЭВМ, перечень загруженных программ. Help Найти похожие ветки
← →
Студент81 (2002-11-09 11:05) [0]Уважаемые господа!
Подскажите, какими функциями API можно получить:
состояние ресурсов ЭВМ,
перечень загруженных программ и размер занимаемой ими памяти,
другую информацию по состоянии ссистемы.
Эти данные необходимы для написания лаб/работы.
Спсибо!
← →
TTCustomDelphiMaster (2002-11-09 11:56) [1]Методички, конспекты читать не пробовали?
← →
Студент81 (2002-11-09 12:17) [2]TTCustomDelphiMaster, пнимаешь, я заочник, а из методичек у нас только задание ;-(
← →
TTCustomDelphiMaster (2002-11-09 12:48) [3]F1 - EnumProcesses, GetProcessMemoryInfo
http://delphi.mastak.ru/cgi-bin/download.pl?get=1033293441&n=1
http://delphi.mastak.ru/cgi-bin/download.pl?get=1027608653&n=1
http://delphi.mastak.ru/cgi-bin/download.pl?get=1030699251&n=1
← →
Студент81 (2002-11-09 14:20) [4]Спасибо!
Примеры замечательные. Только вот вопрос: как получить еще и память, заниаемую процессом (как в Win2000 ?)
Нынишний исходный текст:
Procedure ListProcesses;
var
hSnapShot: THandle;
lppe: TProcessEntry32;
Count: Integer;
procedure FillList; // Заполнение данных в ListView
begin
with Form1.ListView.Items.Add, lppe do
begin
Caption:= ExtractFileName(szExeFile); // Название
SubItems.Add(Format("$%x", [Th32ProcessID]));
SubItems.Add(Format("$%x", [Th32ParentProcessID]));
case pcPriClassBase of
4: SubItems.Add(Format("%d (Простой)", [pcPriClassBase]));
8: SubItems.Add(Format("%d (Нормальный)", [pcPriClassBase]));
13: SubItems.Add(Format("%d (Высокий)", [pcPriClassBase]));
24: SubItems.Add(Format("%d (Реальное время)", [pcPriClassBase]));
else SubItems.Add(Format("%d", [pcPriClassBase]));
end;
SubItems.Add(Format("%d", [cntThreads]));
SubItems.Add(Format("%d", [cntUsage]));
SubItems.Add(szExeFile);
end;
Inc(Count);
end;
begin
hSnapShot:= CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapShot <> INVALID_HANDLE_VALUE then // Если не вернуло ошибку
begin
Form1.ListView.Items.Clear; // Очищаем спсиок
lppe.dwSize:= SizeOf(lppe); //
Count:= 0;
if Process32First(hSnapShot, lppe) then FillList; // Если есть процесс, тозаполняем
while Process32Next(hSnapShot, lppe) do FillList; // Перебераем все процессы
Form1.StatusBar1.Panels[0].Text:= "Итого: " + IntToStr(Count); // Выводим Итого
CloseHandle(hSnapShot);
end
else MessageBox(Form1.Handle, "Internal error", "Error", MB_OK or MB_ICONERROR);
end;
procedure ListWindows;
function EnumWindowsProc(hWnd: THandle; lParam: Integer): Boolean; stdcall;
var
Text,
PName: string;
lpdwPID: PDWORD;
i, iCaptionLength: Integer;
begin
New(lpdwPID);
GetWindowThreadProcessID(hWnd, lpdwPID);
SetLength(Text, 255);
iCaptionLength:= GetWindowText(hWnd, PChar(Text), 255);
if (iCaptionLength <> 0) then
with Form1.ListView_Window.Items.Add, Form1.ListView do
begin
for i:= 0 to Items.Count - 1 do
if Cardinal(StrToInt(Items[i].SubItems[0])) = lpdwPID^ then
PName:= Items[i].Caption;
Caption:= Text;
SubItems.Add(Format("%d", [hWnd]));
SubItems.Add(Format("$%x", [lpdwPID^]));
SubItems.Add(PName);
Dispose(lpdwPID);
end;
Result:= true;
end;
begin
Form1.ListView_Window.Items.Clear;
EnumWindows(@EnumWindowsProc, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListProcesses;
ListWindows;
end;
← →
False_Delirium (2002-11-09 14:46) [5]Нужно по всему дереву потоков пробежаться....и по считать суммарный размер всех dwSize...
Thread32First
Thread32Next
для опред процесса...
← →
Студент81 (2002-11-09 16:43) [6]Так dwSize это размер структуры или я неправ?
← →
Студент81 (2002-11-10 09:37) [7]dwSize: Размер структуры в байтах. Заполнять так ProcessEntry32:= sizeof(TProcessEntry32).
Так как все-таки получить размер занимаемой памяти процессом?
← →
False_Delirium (2002-11-10 12:31) [8]попутал.:)...пардон.:)...
см. THREADENTRY32, размер модуля...
← →
Aleksey Pavlov (2002-11-10 14:29) [9]Если для Win2k пишите программу, то проще и эффективнее, imho, использовать механизмы WMI.
см.:
http://www.delphikingdom.com/mastering/wmi.htm
тут и пример найдёте.
← →
Студент81 (2002-11-10 14:55) [10]False_Delirium
Вот что есть, тольк откуда взять этот размер???
:::
Описание:
TThreadEntry32 = record
dwSize: DWORD;
cntUsage: DWORD;
th32ThreadID: DWORD;
th32OwnerProcessID: DWORD;
tpBasePri: Longint;
tpDeltaPri: Longint;
dwFlags: DWORD;
end;
Описывает блок списка, который перечисляет потоки, выполняющиеся в системе на момент снятия слепка.
dwSize: Размер структуры в байтах. Заполнять так ThreadEntry32:= sizeof(TThreadEntry32)
cntUsage: Счетчик ссылок на поток. Поток уществует пока счетчик выше нуля. Поток завершается как только счетчик становиться равным нулю.
th32ThreadID: Идентификатор потока. Этот идентификатор совместим с иднтификатором потока возвращаемым функцией CreateProcess.
th32OwnerProcessID: Идентификатор процесса потодившего поток. Содержание этого элемента может быть использовано элементами Win32 API.
tpBasePri: Начальный приоритет назначенный потоку. См. THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL
tpDeltaPri: Изменение приритетного уровня потока. Это значение является всего лишь дельтой(разница) базового и измененного уровня потока.
dwFlags: Зарезервированно.
← →
Студент81 (2002-11-10 15:27) [11]False_Delirium
Да, получилось посчитать размер модуля, но получилось, что Delphi весит около 200 Мб.
// Подсчет размера памяти, используемой определенным процессом, суммирую память, занимаемую его модулями!
hSnapShot2:= CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, Th32ProcessID);
if hSnapShot2 <> INVALID_HANDLE_VALUE then
begin
lpme.dwSize:= SizeOf(lpme);
if Module32First(hSnapShot2, lpme) then inc(size_proc,lpme.modBaseSize);
while Module32Next(hSnapShot2, lpme) do inc(size_proc,lpme.modBaseSize);
end;
SubItems.Add(Format("%f", [size_proc/1024/1024])+" Кб.")
А как узнать сколько он занимает в Оперативке???
← →
Студент81 (2002-11-10 15:31) [12]Сорри, все ОК.
Забыл обнулять size_proc:=0;
Всем сенкс, все работает!
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c