Как сделать, так что бы в ListBox можно было бы отразить процессы, происходящие в данный момент в системе и при выборе из списка специальной кнопкой их закрывать? Примерно догадываюсь, как это сделать, но как формализовать не додумаюсь? Знаю, что надо сделать снимок системы через SnapShot, подключить модуль Thelp32, а как дальше?
Сообщение отредактировано: Atreides -
--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
У меня подобное задание: нужно разработать приложение для вывода всех процессов в отдельном ListBox, получения их модулей и вывода в StringGrid, при выборе процесса из ListBox1, сведений о времени старта процесса, времени работы в режиме ядра и режиме пользователя. С выводом процессов и модулей я справилась, осталось вывести сведения о времени старта процесса, времени работы в режиме ядра и режиме пользователя в StringGrid.
var Form1 : TForm1; Nomp : Integer; Pr_num : array [0..50] of integer; SHV : Thandle;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var SH : Thandle; Num,I : Integer; PPE : TProcessEntry32; Pr_names : array [0..50] of string;
begin Num := 0; // получение снимка состояния системы SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0); // выделение из снимка имени первого процессов PPE.dwSize := sizeof (ProcessEntry32); Process32First(SH, PPE); Pr_Names [Num] := PPE.szExeFile; Pr_num [Num] := PPE.th32ProcessID; // получение имен других процессов while Process32Next(SH, PPE) do begin Num := Num + 1; Pr_Names [Num] := PPE.szExeFile; Pr_num [Num] := PPE.th32ProcessID; end; Listbox1.Clear; // вывод списка имен выполняющихся процессов for I := 0 to Num do begin Listbox1.Items.Add (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; // - имя модуля
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;
end;
procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0]:='Время старта'; StringGrid1.Cells[1,0]:='UT'; StringGrid1.Cells[2,0]:='KT'; StringGrid1.Cells[0,1]:=GetProcessTimes(UserTime,TFileTime);