IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Мониторинг процессов, Простейшие действия с процессами
сообщение
Сообщение #1


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Как сделать, так что бы в ListBox можно было бы отразить процессы, происходящие в данный момент в системе и при выборе из списка специальной кнопкой их закрывать? Примерно догадываюсь, как это сделать, но как формализовать не додумаюсь? Знаю, что надо сделать снимок системы через SnapShot, подключить модуль Thelp32, а как дальше?

Сообщение отредактировано: Atreides -


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Доделал я это задание (получить список выполняющихся процессов в системе, вывести модули выбранного процесса и его потоки, идентификатор, время старта, работы в режиме ядра и пользователя), если кому интересно, то вот код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TlHelp32, Grids;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
ListBox2: TListBox;
Label2: TLabel;
StringGrid1: TStringGrid;
Button2: TButton;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1 : TForm1;
Nomp : Integer;
Pr_num : array [0..50] of integer;
SHV : Thandle;
//Pr_nam : array [0..50] of TProcessEntry32;
H:THandle;

N:integer;
Pr_nam : array [0..50] of TProcessEntry32;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
SH : Thandle;
Num,I : Integer;
PPE : TProcessEntry32;
Pr_names : array [0..50] of string; //integer



begin
Num := 0;
// получение снимка состояния системы
SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);
// выделение из снимка имени первого процессов
PPE.dwSize := sizeof (ProcessEntry32);
Process32First(SH, PPE);
Pr_Names [Num] := PPE.szExeFile; //cntThreads;
Pr_num [Num] := PPE.th32ProcessID;
Pr_nam[Num]:=PPE;
// получение имен других процессов
while Process32Next(SH, PPE) do
begin
Num := Num + 1;
Pr_Names [Num] := PPE.szExeFile; //cntThreads;
Pr_num [Num] := PPE.th32ProcessID;
Pr_nam[Num]:=PPE;
end;
Listbox1.Clear;
// вывод списка имен выполняющихся процессов
for I := 0 to Num do
begin
Listbox1.Items.Add (Pr_Names [I]); //(inttostr(Pr_Names [I] ));
end;
// освобождение ресурса - снимка состояния системы
CloseHandle(SH)
end;


procedure TForm1.ListBox1Click(Sender: TObject);
type
TszModule = array [0..255] of char;
var
Num, k : integer;
Modul : TMODULEENTRY32;
Mod_name : string; // - имя модуля
//Pr_nam : array [0..50] of TProcessEntry32;
start,ex,KT,UT,LFT:TFileTime;
ST:TSystemTime;
q:THandle;

begin

ListBox2.Clear;
Nomp := Pr_num [ListBox1.ItemIndex];
//Label1.Caption := IntTostr(Nomp);
SHV := CreateToolHelp32Snapshot ( TH32CS_SnapMODULE, Nomp);
Modul.dwSize := sizeof (TMODULEEntry32);
Module32First(SHV, Modul);
Mod_Name :='';
for k:=0 to 255 do
begin
if Modul.szModule[k]<>#0 then
Mod_Name := Mod_Name + Modul.szModule[k]
else break;
end;
ListBox2.Items.Add(Mod_Name);

// получение имен других модулей

while Module32Next(SHV, Modul) do
begin
Mod_Name :='';
for k:=0 to 255 do
begin
if Modul.szModule[k]<>#0 then
Mod_Name := Mod_Name + Modul.szModule[k]
else break;
end;
ListBox2.Items.Add(Mod_Name);
end;
begin
N:=Pr_num [ListBox1.ItemIndex];
q:=OpenProcess(PROCESS_QUERY_INFORMATION,true,N);

begin
GetProcessTimes(q,start,ex,KT,UT);
FileTimeToLocalFileTime(start,LFT);
FileTimeToSystemTime(LFT,ST);

StringGrid1.cells[0,1]:=IntToStr(Nomp);//(Pr_nam[ListBox1.ItemIndex].th32ProcessID);
StringGrid1.cells[1,1]:=IntToStr(Pr_nam[ListBox1.ItemIndex].cntThreads);
Form1.StringGrid1.Cells[2,1]:=IntToStr(ST.wHour)+':'+
IntToStr(ST.wMinute)+':'+IntToStr(ST.wSecond);
end;
begin
FileTimeToLocalFileTime(UT,LFT);
FileTimeToSystemTime(LFT,ST);
Form1.StringGrid1.Cells[3,1]:=IntToStr(ST.wSecond)+':'+IntToStr(ST.wMilliseconds);

end;
begin
FileTimeToLocalFileTime(KT,LFT);
FileTimeToSystemTime(LFT,ST);
Form1.StringGrid1.Cells[4,1]:=IntToStr(ST.wSecond)+':'+IntToStr(ST.wMilliseconds);

end;
end;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin

StringGrid1.cells[0,0]:='Идентификатор процесса';
StringGrid1.cells[1,0]:='Потоки';
StringGrid1.cells[5,0]:='Базовый приоритет';
StringGrid1.cells[2,0]:='Время старта';
StringGrid1.cells[3,0]:='User Time';
StringGrid1.cells[4,0]:='Kernel Time';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

end.


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Atreides   Мониторинг процессов   1.03.2007 19:40
volvo   DRKB3 -> Системные функции и WinAPI -> Windo…   1.03.2007 19:50
Atreides   У меня только версия 2.3 и там есть пример просмот…   2.03.2007 21:04
volvo   // Функция завершения процесса - проверено под XP …   2.03.2007 21:51
Atreides   Зачем править эту строку: Pr_Names [Num] := …   3.03.2007 13:31
volvo   ProcessTreminate взята из DRKB 2.3 - там есть комм…   3.03.2007 14:42
Atreides   А как сделать, что бы после нажатия кнопки заверше…   7.03.2007 15:21
-Volvo-   Добавь вызов Button1Click, чтобы заново сгенериров…   7.03.2007 15:35
Atreides   Как реализовать, чтобы для выбранного процесса из …   11.03.2007 20:40
Atreides   При помощи средств Delphi можно узнать, сколько вр…   12.03.2007 23:18
Atreides   Вот нашел тут одну ссылку, но она на C, а как пере…   14.03.2007 16:54
volvo   А что, собственно, там перегонять? Описания структ…   14.03.2007 17:05
Atreides   С помощью NtQuerySystemInformation, можно получить…   14.03.2007 17:11
volvo   Посмотри вот эту тему, там Rouse_ выкладывал непло…   14.03.2007 17:21
Iren   У меня подобное задание: нужно разработать приложе…   15.03.2007 22:33
Atreides   А как сделать, что бы можно было выбрать процесс и…   18.03.2007 16:48
Atreides   Написал передачу параметров процессов в StringGrid…   22.03.2007 23:49
Atreides   Доделал я это задание (получить список выполняющих…   3.04.2007 22:40
Atreides   Может, кто знает, как получить имя файла и его вер…   15.04.2007 21:56


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 23:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name