Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
14-62757
kronprince
2003-01-04 18:13
2003.01.20
Хотел задать очередной наболевший вопрос но передумал :(


8-62666
Svin
2002-10-01 08:38
2003.01.20
3d


1-62627
eugene_jin_t
2003-01-09 11:05
2003.01.20
Переменные


7-62885
VladTen
2002-11-05 03:56
2003.01.20
Помогите разобраться


14-62796
Дмитрий К.К.
2002-12-31 05:03
2003.01.20
Именинники 31 декабря





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский