关于上述功用,我们先引见几个API
1.CreateToolhelp32Snapshout function
获得历程、模块或许线程的快照
语法以下:
HANDLE WINAPI CreateToolhelp32Snapshot( _In_ DWORD dwFlags, _In_ DWORD th32ProcessID );
第一个参数:快照中包含了体系的一部份,参数以下:
我们这里用TH32CS_SNAPPROCESS
快照包含了体系内里的一切历程。
第二个是关于 PROCESSENTRY32构造体
语法以下:
typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32, *PPROCESSENTRY32;
这形貌了一个进口,这个进口是当快照被调用时体系地点空间内里的历程被读取。
这里只引见szExeFile[MAX_PATH]和
th32ParentProcessID:这是建立历程后的历程的标识(父历程)
szExeFile:历程内里可执行文件的名字
下面是源代码!部份函数没有解说,但能够经由过程解释或许字面意义能够相识
#include <Windows.h> #include <stdio.h> #include <TlHelp32.h> int main() { HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProceessnap == INVALID_HANDLE_VALUE) { printf_s("建立举行快照失利\n"); return -1; } else { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); BOOL hProcess = Process32First(hProceessnap, &pe32); char buff[1024]; while (hProcess) { wsprintf(buff, "历程名:%s--------------------历程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID); printf_s("%s\n", buff); memset(buff, 0x00, 1024); hProcess = Process32Next(hProceessnap, &pe32); } } CloseHandle(hProceessnap); return 0; }
运转效果以下
以上就是C/C++遍历历程和历程ID的小工具的内容,更多相关内容请关注ki4网(www.ki4.cn)!