Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5ZTMNyz0U3.file.doc
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
291.84 Кб
Скачать

4.2.3. Получение информации о процессах и потоках

Для получения информации о процессах используйте функции Win32 API из библиотеки tlhelp32.dll. Для обеспечения доступа к этой библиотеке в строке Uses кода главной формы необходимо подключить модуль TLHelp32.

Список процессов и потоков (так называемый «снимок»), запущенных в системе позволяет получить функция

HANDLE WINAPI CreateToolhelp32Snapshot (DWORD dwFlags, DWORD th32ProcessID)

Параметры:

dwFlags – флаги процедуры, указывающие какие процессы следует искать. Чтобы найти все процессы, следует указать флаг TH32CS_SNAPALL.

thProcessID – идентификатор процесса (в данном случае можно просто установить 0).

Получить информацию о процессе можно с помощью следующих функций:

BOOL WINAPI Process32First (HANDLE hSnapshot, LPPROCESSENTRY32 lppe);

BOOL WINAPI Process32Next (HANDLE hSnapshot, LPPROCESSENTRY32 lppe)

Параметры:

hSnapshot – указатель на список процессов, возвращенный функцией CreateToolhelp32Snapshot;

lppe –структура типа TPROCESSENTRY32, хранящая информацию о процессе

Первая функция позволяет получить информацию о первом процессе в списке, возвращенном функцией CreateToolhelp32Snapshot. Если данную информацию найти удалось, то функция возвращает true, иначе – false.

Вторая функция позволяет вернуть информацию о следующем после текущего процессе в списке, возвращенном функцией CreateToolhelp32Snapshot. Если данную информацию найти удалось, то функция возвращает true, иначе – false.

В ее состав входят следующие важные поля:

DWORD dwSize – размер структуры в байтах (Внимание: данный параметр должен быть инициализирован перед вызовом функции Process32First, например с помощью функции SizeOf(lppe));

DWORD th32ProcessID – идентификатор процесса;

DWORD cntThreads – число потоков данного процесса;

LONG pcPriClassBase – приоритет данного процесса;

char szExeFile – имя и полный путь к EXE-файлу процесса (только имя можно получить с помощью функции ExtractFileName).

Примерный алгоритм работы функций следующий:

var

pe : TProcessEntry32;

SH : Cardinal;

Begin

SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);

pe.dwSize:=sizeof(pe);

Process32First(SH, pe);

Repeat

<…Операторы>

until not Process32Next(SH, pe);

End;

Доступ к интересующим нас данным осуществляется следующим образом:

ExtractFileName(pe.szExeFile) – имя процесса;

IntToStr(pe.th32ProcessID) – идентификатор процесса;

IntToStr (pe.pcPriClassBase) – приоритет процесса;

IntToStr (pe.cntThreads) – число потоков в процессе.

Функции ExtractFileName и IntToStr распаковывают имя и расширение файла в привычный формат и переводят целое значение в строку соответственно.

В конце работы объект «список всех процессов» должен быть уничтожен с помощью команды CloseHandle(SH) для предотвращения “утечки” памяти.

    1. 4.3.Задание на лабораторную работу

В интегрированной среде разработки Borland Delphi 7 написать программу, выводящую в табличной форме основную информацию (имя, идентификатор, приоритет и количество потоков) обо всех запущенных в системе процессах. Вывод в таблицу текущей информации должен осуществляться при нажатии кнопки. Заголовок и шапка таблицы должны формироваться при создании формы.

Для формирования таблицы используется компонент StringGrid, который находится на вкладке Additional.

Таблица, в которой будут содержаться результаты работы программы, должна иметь 4 столбца (таблица 7):

Таблица 7

Вид таблицы, содержащей информацию о процессах

Имя

процесса

Идентификатор процесса

Приоритет

процесса

Количество потоков

процесса

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]