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

> ВНИМАНИЕ!

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

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

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


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

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

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


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

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


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


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  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

 





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