0、思考
1、相关api
TlHelp32.h
CreateToolhelp32Snapshot
TH32CS_SNAPTHREAD
THREADENTRY32
Thread32First
Thread32Next
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 tagTHREADENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ThreadID;
DWORD th32OwnerProcessID;
LONG tpBasePri;
LONG tpDeltaPri;
DWORD dwFlags;
} THREADENTRY32;
typedef THREADENTRY32 * PTHREADENTRY32;
typedef THREADENTRY32 * LPTHREADENTRY32;
BOOL
WINAPI
Thread32First(
HANDLE hSnapshot,
LPTHREADENTRY32 lpte
);
BOOL
WINAPI
Thread32Next(
HANDLE hSnapshot,
LPTHREADENTRY32 lpte
);
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_SNAPTHREAD, 0);
cout << "CreateToolhelp32Snapshot TH32CS_SNAPTHREAD" << endl;
cout << "cntUsage \t dwFlags \t dwSize \t th32OwnerProcessID \t th32ThreadID \t tpBasePri \t tpDeltaPri \t" << endl;
THREADENTRY32 te32 = {sizeof (te32) };
if (Thread32First (hSnapshot, &te32)) {
do {
cout << te32.cntUsage << "\t";
cout << te32.dwFlags << "\t";
cout << te32.dwSize << "\t";
cout << te32.th32OwnerProcessID << "\t";
cout << te32.th32ThreadID << "\t";
cout << te32.tpBasePri << "\t";
cout << te32.tpDeltaPri << "\t";
cout << endl;
}
while (Thread32Next (hSnapshot, &te32));
}
CloseHandle (hSnapshot);
cout << endl;
}
}