Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Монитор ресурсов ЭВМ, перечень загруженных программ. 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
3-62341
Cheg
2002-12-24 12:13
2003.01.20
TStoredProc.Params.CreateParam странно выполняеться...


4-62920
_Ed_
2002-12-04 06:44
2003.01.20
ExtractAssociatedIcon под XP


4-62938
Natalie
2002-12-04 09:25
2003.01.20
как узнать серийный номер CD???


8-62663
ych_boriss
2002-10-03 03:42
2003.01.20
шрифты


1-62597
Gadfly
2003-01-09 09:34
2003.01.20
Форматирование ячеек в Excel