Как сделать, так что бы в ListBox можно было бы отразить процессы, происходящие в данный момент в системе и при выборе из списка специальной кнопкой их закрывать? Примерно догадываюсь, как это сделать, но как формализовать не додумаюсь? Знаю, что надо сделать снимок системы через SnapShot, подключить модуль Thelp32, а как дальше?
Сообщение отредактировано: Atreides -
--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
У меня только версия 2.3 и там есть пример просмотра и завершения процессов, но, к сожалению, только для винды 98, а, начиная с NT уже не работает. Пока нет времени, что бы скачать новую версию. Мне осталась только третья часть задания: 1. Создать список процессов. Кроме имен процессов, сохраняемых в массиве Pr_Names, необходимо сохранять в дополнительном массиве идентификаторы процессов. 2. Получить номер (индекс) выделенного мышью имени завершаемого процесса, используя метод ListBox1.ItemIndex и соответствующий ему идентификатор процесса. 3. По идентификатору процесса получить его описатель, используя функцию OpenProcess(). 4. Если описатель получен, завершить процесс, используя полученный описатель. Я написал получение списка процессов, идентификаторов процессов и базовых приоритетов потоков осталось только сделать кнопку (Button2) завершения выбранного процесса из списка, а вот как это сделать? К тому же нужно сделать, так что бы кнопка делалась активной только когда выбирается процесс из списка ListBox, это как можно сделать? Для завершения процесса используется функция TerminateProcess ( HandleProc, ExitCode). Значение описателя необходимо получить по идентификатору процесса с помощью функции OpenProcess ( PROCESS_TERMINATE)?
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; // получение имен других процессов while Process32Next(SH, PPE) do begin Num := Num + 1; Pr_Names [Num] := PPE.szExeFile; end; Listbox1.Clear; // вывод списка имен выполняющихся процессов for I := 0 to Num do Listbox1.Items.Add (Pr_Names [I] ); // освобождение ресурса - снимка состояния системы CloseHandle(SH) end;
procedure TForm1.BitBtn1Click(Sender: TObject); begin Close; end;
procedure TForm1.N3Click(Sender: TObject); begin Close; end;
procedure TForm1.Button3Click(Sender: TObject); var Sh : Thandle; Th : TTHREADENTRY32; LstIt : TlistItem; 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;
end.
Сообщение отредактировано: Atreides -
--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!