- •1.2.2. Команды управления циклом
- •1.2.3. Работа с массивами
- •1.3. Задание на лабораторную работу
- •1.4. Отчет по лабораторной работе
- •2. Лабораторная работа № 4
- •2.1. Общие методические указания по выполнению лабораторной работы
- •2.2. Теоретические сведения
- •2.2.1. Стек и сегмент стека
- •2.2.2. Стековые команды
- •2.2.3 Приемы работы со стеком
- •2.3. Задание на лабораторную работу
- •2.4. Отчет по лабораторной работе
- •3 .Лабораторная работа № 5
- •3.1. Общие методические указания по выполнению лабораторной работы
- •3.2. Теоретические сведения
- •3.2.1. Дальние переходы
- •3.2.2. Подпрограммы (процедуры)
- •3.3. Задание на лабораторную работу
- •3.4. Отчет по лабораторной работе
- •4. Лабораторная работа № 6
- •4.1. Общие методические указания по выполнению лабораторной работы
- •4.2. Теоретические сведения
- •4.2.1. Общие сведения о процессах и потоках
- •4.2.2. Описание свойств и методов компонента StringGrid
- •4.2.3. Получение информации о процессах и потоках
- •4.3.Задание на лабораторную работу
- •4.4. Отчет по лабораторной работе
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) для предотвращения “утечки” памяти.
4.3.Задание на лабораторную работу
В интегрированной среде разработки Borland Delphi 7 написать программу, выводящую в табличной форме основную информацию (имя, идентификатор, приоритет и количество потоков) обо всех запущенных в системе процессах. Вывод в таблицу текущей информации должен осуществляться при нажатии кнопки. Заголовок и шапка таблицы должны формироваться при создании формы.
Для формирования таблицы используется компонент StringGrid, который находится на вкладке Additional.
Таблица, в которой будут содержаться результаты работы программы, должна иметь 4 столбца (таблица 7):
Таблица 7
Вид таблицы, содержащей информацию о процессах
Имя процесса |
Идентификатор процесса |
Приоритет процесса |
Количество потоков процесса |
|
|
|
|