Как сделать, так что бы в ListBox можно было бы отразить процессы, происходящие в данный момент в системе и при выборе из списка специальной кнопкой их закрывать? Примерно догадываюсь, как это сделать, но как формализовать не додумаюсь? Знаю, что надо сделать снимок системы через SnapShot, подключить модуль Thelp32, а как дальше?
Сообщение отредактировано: Atreides -
--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
Написал передачу параметров процессов в StringGrid? А как определить время работы процесса в режиме пользователя (UserTime) и ядра (KernelTime), а так же его время старта?
var Form1: TForm1; SH : Thandle; ListBox1: TListBox; Num, I ,a : Integer; PPE : TProcessEntry32; Pr_names : array [0..50] of string; Pr_num : array [0..50] of TProcessEntry32;
procedure TForm1.Button1Click(Sender: TObject); begin Num := 0; // получение снимка состояния системы SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0); // выделение из снимка имени первого процессов PPE.dwSize := sizeof (ProcessEntry32); Process32First(SH, PPE); Pr_Names [Num] := PPE.szExeFile; Pr_num [Num]:=PPE; // получение имен других процессов while Process32Next(SH, PPE) do begin Num := Num + 1; Pr_Names [Num] := PPE.szExeFile; Pr_num [Num]:=PPE; end; Listbox1.Clear; // вывод списка имен выполняющихся процессов for I := 0 to Num do Listbox1.Items.Add(Pr_Names[I]); // освобождение ресурса - снимка состояния системы CloseHandle(SH); end; procedure TForm1.Button2Click(Sender: TObject); begin Sh := CreateToolHelp32Snapshot (TH32CS_SNAPALL,0); Th.dwSize := sizeof (TTHREADEntry32); Thread32First(sh,Th); ListView1.Items.Clear; LstIt :=ListView1.Items.Add; LstIt.Caption:=IntToStr(Th.th32OwnerProcessID); LstIt.SubItems.Add(IntToStr(Th.tpBasePri)); repeat LstIt :=ListView1.Items.Add; LstIt.Caption:=IntToStr(Th.th32OwnerProcessID); LstIt.SubItems.Add(IntToStr(Th.tpBasePri)) until not Thread32Next (sh,Th); CloseHandle(Sh);
end;
procedure TForm1.ListBox1Click(Sender: TObject); begin StringGrid1.Cells[0,1]:=IntToStr(Pr_num[ListBox1.ItemIndex].th32ProcessID); StringGrid1.Cells[1,1]:=IntToStr(Pr_num[ListBox1.ItemIndex].th32ModuleID); StringGrid1.Cells[2,1]:=IntToStr(Pr_num[ListBox1.ItemIndex].cntThreads); end;