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

> ВНИМАНИЕ!

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

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


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

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

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


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

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


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


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

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

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


У меня только версия 2.3 и там есть пример просмотра и завершения процессов, но, к сожалению, только для винды 98, а, начиная с NT уже не работает. Пока нет времени, что бы скачать новую версию. Мне осталась только третья часть задания:
1. Создать список процессов. Кроме имен процессов, сохраняемых в массиве Pr_Names, необходимо сохранять в дополнительном массиве идентификаторы процессов.
2. Получить номер (индекс) выделенного мышью имени завершаемого процесса, используя метод ListBox1.ItemIndex и соответствующий ему идентификатор процесса.
3. По идентификатору процесса получить его описатель, используя функцию OpenProcess().
4. Если описатель получен, завершить процесс, используя полученный описатель.
Я написал получение списка процессов, идентификаторов процессов и базовых приоритетов потоков осталось только сделать кнопку (Button2) завершения выбранного процесса из списка, а вот как это сделать? К тому же нужно сделать, так что бы кнопка делалась активной только когда выбирается процесс из списка ListBox, это как можно сделать? Для завершения процесса используется функция TerminateProcess ( HandleProc, ExitCode). Значение описателя необходимо получить по идентификатору процесса с помощью функции OpenProcess ( PROCESS_TERMINATE)?
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, tlhelp32, StdCtrls, Buttons, ComCtrls, Menus;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    ListView1: TListView;
    Button3: TButton;
    BitBtn1: TBitBtn;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

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;
// получение  имен других  процессов
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 - 2.03.2007 17:06


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

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


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

 



- Текстовая версия 26.07.2025 6:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"