Win32API プロセスのスナップショットを取得する Process32First, Process32Next
プロセスのスナップショットを取得する
使用するAPI
CreateToolhelp32Snapshot プロセスと、プロセスが使っているヒープ、モジュール、 スレッドのスナップショットを作成します。 HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID );
TH32CS_INHERIT | スナップショットのハンドルが継承可能であることを意味します。 |
TH32CS_SNAPALL | TH32CS_SNAPHEAPLIST、TH32CS_SNAPMODULE、TH32CS_SNAPPROCESS、 TH32CS_SNAPTHREAD のすべてを指定したのと同じことを意味します。 |
TH32CS_SNAPHEAPLIST | 指定されたプロセスのヒープリストを、スナップショットに含めます。 |
TH32CS_SNAPMODULE | 指定されたプロセスのモジュールリストを、スナップショットに含めます。 |
TH32CS_SNAPPROCESS | プロセスリストを、スナップショットに含めます。 |
TH32CS_SNAPTHREAD | スレッドリストを、スナップショットに含めます。 |
参考:http://msdn.microsoft.com/ja-jp/library/cc428938.aspx
PROCESSENTRY32構造体は、tlhelp32.h で以下のように定義されている
typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; // this process ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; DWORD th32ParentProcessID; // this process's parent process LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; CHAR szExeFile[MAX_PATH]; // Path } PROCESSENTRY32; typedef PROCESSENTRY32 * PPROCESSENTRY32; typedef PROCESSENTRY32 * LPPROCESSENTRY32;
#include <windows.h> #include <tlhelp32.h> int main() { HANDLE hSnapshot; PROCESSENTRY32 entry; hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if (hSnapshot == INVALID_HANDLE_VALUE) { return 1; } entry.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, &entry)) { goto Exit; } do { printf("ExeFile = %s\n", entry.szExeFile); } while (Process32Next(hSnapshot, &entry)); Exit: CloseHandle(hSnapshot); return 0; }