0、思考
1、相关api
TlHelp32.h
CreateToolhelp32Snapshot
TH32CS_SNAPPROCESS
PROCESSENTRY32
Process32First
Process32Next
CloseHandle
3、api说明
#define MAX_MODULE_NAME32 255
HANDLE
WINAPI
CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
#define TH32CS_SNAPHEAPLIST 0x00000001
#define TH32CS_SNAPPROCESS 0x00000002
#define TH32CS_SNAPTHREAD 0x00000004
#define TH32CS_SNAPMODULE 0x00000008
#define TH32CS_SNAPMODULE32 0x00000010
#define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
#define TH32CS_INHERIT 0x80000000
typedef struct tagPROCESSENTRY32W
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
WCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32W;
typedef PROCESSENTRY32W * PPROCESSENTRY32W;
typedef PROCESSENTRY32W * LPPROCESSENTRY32W;
BOOL
WINAPI
Process32FirstW(
HANDLE hSnapshot,
LPPROCESSENTRY32W lppe
);
BOOL
WINAPI
Process32NextW(
HANDLE hSnapshot,
LPPROCESSENTRY32W lppe
);
typedef struct tagPROCESSENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
CHAR szExeFile[MAX_PATH];
} PROCESSENTRY32;
typedef PROCESSENTRY32 * PPROCESSENTRY32;
typedef PROCESSENTRY32 * LPPROCESSENTRY32;
BOOL
WINAPI
Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
BOOL
WINAPI
Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
#ifdef UNICODE
#define Process32First Process32FirstW
#define Process32Next Process32NextW
#define PROCESSENTRY32 PROCESSENTRY32W
#define PPROCESSENTRY32 PPROCESSENTRY32W
#define LPPROCESSENTRY32 LPPROCESSENTRY32W
#endif // !UNICODE
4、c++封装
5、
6、举个栗子
#include <windows.h>
#include <TlHelp32.h>
#include <tchar.h>
#include <stdio.h>
#include <iostream>
using namespace std;
void main ()
{
{
HANDLE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
cout << "CreateToolhelp32Snapshot TH32CS_SNAPPROCESS" << endl;
cout << "cntThreads \t cntUsage \t dwFlags \t pcPriClassBase \t szExeFile \t th32DefaultHeapID \t th32ModuleID \t th32ParentProcessID \t th32ProcessID \t" << endl;
PROCESSENTRY32 pe32 = { sizeof (pe32) };
if (Process32First (hSnapshot, &pe32)) {
do {
cout << pe32.cntThreads << "\t";
cout << pe32.cntUsage << "\t";
cout << pe32.dwFlags << "\t";
cout << pe32.pcPriClassBase << "\t";
_tprintf (_T("%s\t"), pe32.szExeFile);
cout << pe32.th32DefaultHeapID << "\t";
cout << pe32.th32ModuleID << "\t";
cout << pe32.th32ParentProcessID << "\t";
cout << pe32.th32ProcessID << "\t";
cout << endl;
}
while (Process32Next (hSnapshot, &pe32));
}
CloseHandle (hSnapshot);
cout << endl;
}
}