Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

6.3. Пример использования функций ToolHelp

Пример приложения, использующего функции ToolHelp приведен на рисунке 6.1. Данное приложение выводит на экран список всех процессов и список всех модулей в системе.

Для создания данного приложения выполните следующие действия:

  1. Перенесите на форму компоненты, перечисленные в таблице 6.8.

Таблица 6.8 Компоненты создаваемого приложения

Компонент

Класс

Описание

Button1

TButton

Командная кнопка «Завершение работы»

Button2

TButton

Командная кнопка «Обновить»

Button3

TButton

Командная кнопка «Процессы/Модули»

StringGrid1

TStringGrid

Таблица

  1. В блок Uses включите файл tlhelp32:

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons,tlhelp32;

  1. В блок var добавьте список глобальных переменных:

var

Form1: TForm1;

pe32:tProcessEntry32;

me32:tModuleEntry32;

hProcess:THandle;

  1. Для события формы OnCreate запишите следующий программный код:

procedure TForm1.FormCreate(Sender: TObject);

VAR

x,code:Integer;

s:String;

begin

StringGrid1.Cells[0,0]:='№';

StringGrid1.Cells[1,0]:='Имя файла';

StringGrid1.Cells[2,0]:='Идентификатор процесса';

StringGrid1.Cells[3,0]:='Количество потоков';

StringGrid1.Cells[4,0]:='Базовый приоритет';

pe32.dwSize:=SizeOf(tProcessEntry32);

x:=1;

hProcess:=CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS,0);

Process32First(hProcess,pe32);

{ str(pe32.th32ProcessID,StringGrid1.Cells[2,x]);

val(StringGrid1.Cells[2,x],pe32.th32ProcessID,code);}

str(pe32.th32ProcessID,s);

val(s,pe32.th32ProcessID,code);

Repeat

StringGrid1.Cells[0,x]:=IntToStr(x);

StringGrid1.Cells[1,x]:=pe32.szExeFile;

StringGrid1.Cells[2,x]:=IntToStr(pe32.th32ProcessID);

StringGrid1.Cells[3,x]:=IntToStr(pe32.cntThreads);

StringGrid1.Cells[4,x]:=IntToStr(pe32.pcpriClassBase);

x:=x+1;

StringGrid1.RowCount:=x;

until Process32Next(hProcess,pe32)=False;

end;

Данный программный код выводит на экран при запуске приложения список процессов в системе.

  1. Для события OnClick кнопки Button1 запишите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.Close;

end;

Данный программный код выполняет закрытие формы.

  1. Для события OnClick кнопки Button2 запишите следующий программный код:

procedure TForm1.Button2Click(Sender: TObject);

begin

Form1.OnCreate(Sender);

end;

Данный программный код выводит на экран список процессов в системе.

Для события OnClick кнопки Button33 запишите следующий программный код:

procedure TForm1.Button3Click(Sender: TObject);

VAR

x:Integer;

begin

If Button3.Caption='Модули' then

begin

Button3.Caption:='Процессы';

Closehandle(hProcess);

x:=1;

StringGrid1.Cells[0,0]:='№';

StringGrid1.Cells[1,0]:='Модули';

StringGrid1.Cells[2,0]:='';

StringGrid1.Cells[3,0]:='';

StringGrid1.Cells[4,0]:='';

StringGrid1.Cells[5,0]:='';

StringGrid1.ColCount:=2;

me32.dwSize:=SizeOf(tModuleEntry32);

hProcess:=CreateToolhelp32SnapShot(TH32CS_SNAPMODULE,0);

Module32First(hProcess,me32);

Repeat

StringGrid1.Cells[1,x]:=me32.szModule;

x:=x+1;

StringGrid1.RowCount:=x;

until Module32Next(hProcess,me32)=False;

end

else

begin

StringGrid1.ColCount:=6;

StringGrid1.ColWidths[1]:=250;

Button3.Caption:='Модули';

Form1.OnCreate(Sender);

end;

end;

  1. Откомпилируйте разработанное приложение.