通过进程快照枚举进程的信息

  1 /**********使用***********
  2 CreateToolhelp32Snapshot( )
  3 Process32First( )
  4 Process32Next( )
  5 枚举进程的相关信息
  6 **************************/
  7 
  8 #include "stdafx.h"
  9 #include "windows.h"
 10 #include "stdio.h"
 11 #include "TlHelp32.h"    //使用ToolHeap32 工具的头文件
 12 
 13 
 14 int main( )
 15 {
 16     PROCESSENTRY32    hProcessEntry = {0};    //PROCESSENTRY32系统自带的,定义一个结构体变量,用于保存获得进程的信息. 
 17     hProcessEntry.dwSize = sizeof(hProcessEntry);    //这个变量使用之前要先设置大小.类型里面有一个元素是 .dwSize
 18 
 19     BOOL ProcessSnapshotRet;//定义一个布尔变量,用于保存Process32First( )和Process32Next( )各自的返回值.
 20     HANDLE    hProcessID;        //定义一个句柄变量,用于保存获得的系统快照的句柄
 21 
 22     hProcessID = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    //获得了进程快照的句柄.
 23     //TH32CS_SNAPPROCESS是WINDOWS自带宏.代表这个函数是用于获得 进程的信息.
 24     //因为这个CreateToolhelp32Snapshot的第一个参数,是决定了这个函数获得是进程,还是线程,还是模块的信息.
 25 
 26 
 27     if(hProcessID == INVALID_HANDLE_VALUE)    //判断获得系统快照句柄是否成功.
 28     {
 29         return -1;                            //如果为否,不成功.就直接退出.
 30     }
 31 
 32     ProcessSnapshotRet = Process32First(hProcessID,&hProcessEntry);
 33     //通过系统快照的句柄,获得第一个进程的信息,把信息都放在了新定义的结构体变量hProcessEntry里面.
 34     //到时候用的话,就直接到hProcessEntry拿就是了. 如果获取信息成功,返回值为1.
 35 
 36     while(ProcessSnapshotRet)    //判断第一个进程的信息获取是否成功.
 37     {
 38         printf("ProcessID is: %d	 ProcessEXE name is: %s
",hProcessEntry.th32ProcessID, hProcessEntry.szExeFile);
 39         //打印了获得的进程ID. 还有它的EXE文件名.
 40 
 41         ProcessSnapshotRet = Process32Next(hProcessID,&hProcessEntry);
 42         //继续通过系统快照的句柄,获得下一个进程的信息,把信息都放在了新定义的结构体变量hProcessEntry里面.
 43         //到时候用的话,就直接到hProcessEntry拿就是了. 如果获取信息成功,返回值为1.
 44     }    
 45 
 46     return 0;
 47 }
 48 
 49 
 50 
 51 
 52 #if 0
 53 /************************************************************
 54 >>>>>>>>>>>>>>>>>>>>>>>>>>> 总结 <<<<<<<<<<<<<<<<<<<<<<<<<<<< 
 55 ************************************************************/
 56 
 57 //使用下面3个函数,必须要加头文件 "TlHlep32.h"
 58 
 59 //*********************************************************************
 60 //CreateToolhelp32Snapshot函数的原型
 61 //作用:获得系统快照的句柄
 62 //返回值:HANDLE(句柄类型)的值.
 63 HANDLE WINAPI CreateToolhelp32Snapshot(
 64                                        DWORD dwFlags,            //DWORD
 65                                        DWORD th32ProcessID        //DWORD
 66                                        );
 67 /*--------------------------------------------------------------------*/
 68 
 69 
 70 
 71 //*********************************************************************
 72 //Process32First函数的原型
 73 //作用:获得从系统快照中获得第一个线程的一些信息,信息都保存在LPPROCESSENTRY32 定义的结构体变量中.
 74 //返回值得: TRUR or FALSE
 75 BOOL WINAPI Process32First(  
 76                            HANDLE hSnapshot,    //HANDLE  句柄型变量
 77                            LPPROCESSENTRY32 lppe    //LPPROCESSENTRY32  结构体型变量
 78                            );
 79 
 80                             //LPPROCESSENTRY32结构体类型原型
 81                             typedef struct tagPROCESSENTRY32
 82                             {
 83                                 DWORD   dwSize;                    //定义一个新的变量new以后一定要设置这个的dwSize的大小
 84                                                                 //如:一般都是new.dwSize = sizeof(tagPROCESSENTRY32)
 85                                 DWORD   cntUsage;
 86                                 DWORD   th32ProcessID;          // 第一个进程的ID
 87                                 ULONG_PTR th32DefaultHeapID;
 88                                 DWORD   th32ModuleID;           // associated exe
 89                                 DWORD   cntThreads;
 90                                 DWORD   th32ParentProcessID;    // this process's parent process
 91                                 LONG    pcPriClassBase;         // Base priority of process's threads
 92                                 DWORD   dwFlags;
 93                                 CHAR    szExeFile[MAX_PATH];    // Path(环境)
 94                             } PROCESSENTRY32;
 95                             typedef PROCESSENTRY32 *  PPROCESSENTRY32;
 96                             typedef PROCESSENTRY32 *  LPPROCESSENTRY32;
 97                             //可以看出,函数获得的线程信息都在LPPROCESSENTRY32 定义的结构体变量中,
 98                             //所以这个LPPROCESSENTRY32型的变量很重要.
 99 /*--------------------------------------------------------------------*/
100 
101 
102 
103 //*********************************************************************
104 //Process32Next函数的原型
105 //作用:获得从系统快照中获得的下一个进程信息,信息都保存在LPPROCESSENTRY32 定义的结构体变量中.
106 //使用方法和Process32First相似
107 //返回值得: TRUR or FALSE
108 BOOL WINAPI Process32Next(  
109                           HANDLE hSnapshot,
110                           LPPROCESSENTRY32 lppe
111                           );
112 /*--------------------------------------------------------------------*/
113 #endif
原文地址:https://www.cnblogs.com/adalovelace/p/4092030.html