zoukankan      html  css  js  c++  java
  • 通过进程快照枚举进程的信息

      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
  • 相关阅读:
    PHP curl_setopt函数用法介绍补充篇
    Javascript的setTimeOut和setInterval的定时器用法
    PHP curl_setopt函数用法介绍上篇
    开启PHP的伪静态
    关于MySQL的几个命令之load
    使用PHP生成和获取XML格式数据
    WEB开发中常用的正则表达式
    WEB开发中的页面跳转方法总结
    PHP的serialize序列化数据与JSON格式化数据
    PHP防止重复提交表单
  • 原文地址:https://www.cnblogs.com/adalovelace/p/4092030.html
Copyright © 2011-2022 走看看