ZloC++ MyLogo ZloASM
Главная | Программы | Работа | Статьи | Юмор | О себе

Использование ToolHelp 32

Занятия разрушают способность к созиданию

Введение.
Я хочу рассказать о технологии Tool Help 32, позволяющей работать с процессами. Это, пожалуй, самое удобное средство для работы с процессами в операционных системах семейства Windows. Все прототипы функций и структуры находятся в одном заголовочном файле, технология хорошо документированна, и при грамотном использовании может служить хорошим инструментом программиста. Мы рассмотрим только работу с процессами, но, я думаю, что просмотрев файл tlhelp32.h и почитав статьи в MSDN или в Platform SDK вы легко найдёте всю необходимую для себя информацию.

Tlhelp32.h - основа Tool Help.
В этом файле находятся прототипы функций и структуры. Для работы с процессами сначала нам нужно получить дескриптор. Для этого мы используем функцию CreateToolhelp32Snapshot:

HANDLE
WINAPI
CreateToolhelp32Snapshot(
    DWORD dwFlags,
    DWORD th32ProcessID
    );
Переменная dwFlags может принимать следующие значения:
TH32CS_SNAPHEAPLIST
TH32CS_SNAPMODULE
TH32CS_SNAPPROCESS
TH32CS_SNAPTHREAD
Теперь мы можем начать работать с этим "снимком" через дескриптор. Нам необходимо создать переменную типа PROCESSENTRY32 (структура, поля можо посмотреть в файле tlhelp32.h). Для того, чтобы заполнить эту структуру значениями запущенных процессов надо вызвать функцию Process32First:
BOOL
WINAPI
Process32First(
    HANDLE hSnapshot,
    LPPROCESSENTRY32 lppe
    );
Для дальнейшего получения списка мы ипользуем другую функцию - Process32Next:
BOOL
WINAPI
Process32Next(
    HANDLE hSnapshot,
    LPPROCESSENTRY32 lppe
    );
Этой информации хватит для написания простейшей консольной программы, перечисляющей процессы, чем мы сейчас и займёмся. Хотя функции Tool Help 32 этим далеко не ограничены, т.к. с её помощью мы можем получать не только список процессов, но и список потоков, нитей, и модулей данного процесса.

Пример:

#include <windows.h>
#include <tlhelp32.h> //Все функции Tool Help 32 в этом файле
#include <iostream>
using namespace std;

void main()
{
	cout << "Example by zlyden. Using Tool Help 32" << endl;
	PROCESSENTRY32 process;  //Структура в которой будут записаны свойства процессов
	HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
	//TH32CS_SNAPPROCESS для получения списка процессов
	Process32First(hSnap,&process);
	while (Process32Next(hSnap,&process))
		cout << process.szExeFile << endl; //szExeFile содержит имя процесса
	CloseHandle(hSnap);
}
Исходник и скомпилированную программу вы можете найти в разделе Программы в виде архива.



В статье использована информация из MSDN и tlhelp32.h

Dmitri Alenitchev, Copyright © 2004

Используются технологии uCoz