利用进程快照枚举当前Windows运行进程的信息

来源:互联网 发布:沈阳淘宝代运营 编辑:程序博客网 时间:2024/06/09 06:50
#include "stdafx.h"
#include "Windows.h"
#include "process.h"
#include "tlhelp32.h"

const int THREAD_NUM = 500;  
    HANDLE handle[THREAD_NUM];  
unsigned int __stdcall ThreadFun(PVOID pM)  
{  
    printf("线程ID号为%4d\n", GetCurrentThreadId());  
    return 0;  
}  
int _tmain(int argc, _TCHAR* argv[])
{
    PROCESSENTRY32 pe;//PROCESSENTRY32:用来存放快照进程信息的一个结构体
    //设置结构体pe的大小
    pe.dwSize = sizeof(pe);
    //利用函数CreateToolhelp32Snapshot()给系统内的所有进程拍一个快照
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot调用失败!\n");
        return -1;
    }
    //遍历进程快照,轮流显示每个进程的信息
    BOOL bMore =::Process32First(hProcessSnap,&pe);//利用process32First函数来获得第一个进程的句柄
    BOOL terminate = FALSE;
     while( bMore != FALSE)
    {
        printf("\n\n");
        printf("进程名:%s\n",pe.szExeFile);
        printf("PID:%u\n",pe.th32ProcessID);
        printf("线程数:%u\n",pe.cntThreads);
    for (int i = 0; i < pe.cntThreads; i++)  
        handle[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, NULL, 0, NULL);  
     WaitForMultipleObjects(pe.cntThreads, handle, TRUE, INFINITE);  
        bMore=::Process32Next(hProcessSnap,&pe);//利用Process32Next函数来获得下一个进程的句柄
    }
    //释放snapshot对象
    ::CloseHandle(hProcessSnap);
    system("pause");
    return 0;
}
原创粉丝点击