Статья: Работа с процессами в С/С++. Основные приемы
printf(" %s n", MdlEntry.szModule);
//и переходим к следующему
bIsok = Module32Next(pMdlSnap, &MdlEntry);
}
//чистимпамять!
CloseHandle(pMdlSnap);
return 1;
}
А теперь немного притормозим и посмотрим, какую еще информацию о процессах и модулях мы получаем:
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; //Рамерструктуры
DWORD cntUsage; //Число ссылк на процесс. Процесс уничтожается, //когда число ссылок становится 0
DWORD th32ProcessID; //Идентификатор процесса - необходим
//во многих функциях
DWORD th32DefaultHeapID; //Идентификатор основной кучи - имеет
//смысл только в функциях toolhelp
DWORD th32ModuleID; //идентификатор модуля - имеет
//смысл только в функциях toolhelp
DWORD cntThreads; //Число потоков
DWORD th32ParentProcessID; //Идентификатор родителя - возвращается
//Даже если родителя уже нет
LONG pcPriClassBase; //приоритет по умолчанию всех //создаваемых процессом потоков
DWORD dwFlags; //Зарезервировано
CHAR szExeFile[MAX_PATH]; //Собственно имя процесса
} PROCESSENTRY32,*PPROCESSENTRY32,*LPPROCESSENTRY32;
typedef struct tagMODULEENTRY32 {
DWORD dwSize; //размерструктуры
DWORD th32ModuleID; //идентификатормодуля
DWORD th32ProcessID; //идентификатор процесса, к которому относится