プロセススナップショットの取得
プロセススナップショットは主にPROSCESSENTRY 32という構造体に存在し、以下はこの構造体の情報である.
HANDLE WINAPI CreateToolhelp 32 Snapshot(DWORDdwFlags,//「スナップショット」で返す対象を指定するために使用され、TH 32 CS_SNAPPROCESSなどのDWORD th 32 ProcessID//プロセスIDであり、0であれば、すべてのプロセス、すなわちプロセススナップショットテーブルを表す).プロセスのスナップショットハンドルを取得します
BOOL WINAPI Process 32 First(HANDLE hSnapshot,//プロセススナップショットハンドルLPPROSCESSENTRY 32//PROCESCESSENTRY 32構造体ポインタ);最初のプロセススナップショットを取得するには、次のプロセスを取得するためにProcess 32 Nextを使用します.使用パラメータは、上のProcess 32 Firstと同じです.次は小さなコードです.
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; //
DWORD cntUsage; //0
DWORD th32ProcessID; // ID:PID
ULONG_PTR th32DefaultHeapID; //0
DWORD th32ModuleID; //0
DWORD cntThreads; //
DWORD th32ParentProcessID; // ID
LONG pcPriClassBase; //
DWORD dwFlags; //0
TCHAR szExeFile[MAX_PATH]; //
} PROCESSENTRY32, *PPROCESSENTRY32;
HANDLE WINAPI CreateToolhelp 32 Snapshot(DWORDdwFlags,//「スナップショット」で返す対象を指定するために使用され、TH 32 CS_SNAPPROCESSなどのDWORD th 32 ProcessID//プロセスIDであり、0であれば、すべてのプロセス、すなわちプロセススナップショットテーブルを表す).プロセスのスナップショットハンドルを取得します
BOOL WINAPI Process 32 First(HANDLE hSnapshot,//プロセススナップショットハンドルLPPROSCESSENTRY 32//PROCESCESSENTRY 32構造体ポインタ);最初のプロセススナップショットを取得するには、次のプロセスを取得するためにProcess 32 Nextを使用します.使用パラメータは、上のProcess 32 Firstと同じです.次は小さなコードです.
#include <windows.h>
#include <Tlhelp32.h>
#include <stdio.h>
DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle);
int main()
{
//
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hProcessShot;
hProcessShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // , 0
if (hProcessShot == INVALID_HANDLE_VALUE)
{
GetLastErrorBox(NULL," ");
return 0;
}
//
if (Process32First(hProcessShot,&pe32))//
{
for (int i = 0;Process32Next(hProcessShot, &pe32);i++)
{
printf("%d : %-20s ",i, pe32.szExeFile);
TCHAR szStrTemp[50];
wsprintf(szStrTemp,"PID : %d", pe32.th32ProcessID);
printf("%-20s ", szStrTemp);
wsprintf(szStrTemp,"cntThreads : %d",pe32.cntThreads);
printf("%-20s
",szStrTemp);
}
}
//
CloseHandle(hProcessShot);
return 0;
}
//
DWORD GetLastErrorBox(HWND hWnd, LPSTR lpTitle)
{
LPVOID lpv;
DWORD dwRv;
if (GetLastError() == 0) return 0;
dwRv = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
(LPSTR)&lpv,
0,
NULL);
MessageBox(hWnd, (LPCSTR)lpv, lpTitle, MB_OK);
if(dwRv)
LocalFree(lpv);
SetLastError(0);
return dwRv;
}