zoukankan      html  css  js  c++  java
  • C/C++遍历进程和进程ID的小工具

    原文:http://blog.csdn.net/qq78442761/article/details/54646010

    当我们写某些具有破坏性的程序时就需要对进程进行遍历和提取ID 

    对于上述功能,我们先介绍几个API

    1.CreateToolhelp32Snapshout function

    得到进程、模块或者线程的快照

    语法如下:

    [cpp] view plain copy
     
    1. HANDLE WINAPI CreateToolhelp32Snapshot(  
    2.   _In_ DWORD dwFlags,  
    3.   _In_ DWORD th32ProcessID  
    4. );  

    第一个参数:快照中包含了系统的一部分,参数如下:

    我们这里用TH32CS_SNAPPROCESS

    快照包含了系统里面的所有进程。

    第二个是关于 PROCESSENTRY32结构体

    语法如下:

    [cpp] view plain copy
     
    1. typedef struct tagPROCESSENTRY32 {  
    2.   DWORD     dwSize;  
    3.   DWORD     cntUsage;  
    4.   DWORD     th32ProcessID;  
    5.   ULONG_PTR th32DefaultHeapID;  
    6.   DWORD     th32ModuleID;  
    7.   DWORD     cntThreads;  
    8.   DWORD     th32ParentProcessID;  
    9.   LONG      pcPriClassBase;  
    10.   DWORD     dwFlags;  
    11.   TCHAR     szExeFile[MAX_PATH];  
    12. } PROCESSENTRY32, *PPROCESSENTRY32;  

    这描述了一个入口,这个入口是当快照被调用时系统地址空间里面的进程被读取。

    这里只介绍szExeFile[MAX_PATH]和

    th32ParentProcessID:这是创建进程后的进程的标识(父进程)

    szExeFile:进程里面可执行文件的名字

    下面是源代码!部分函数没有讲解,但可以通过注释或者字面意思可以了解

    [cpp] view plain copy
     
    1. #include <Windows.h>  
    2. #include <stdio.h>  
    3. #include <TlHelp32.h>  
    4.   
    5. int main()  
    6. {  
    7.     HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  
    8.     if (hProceessnap == INVALID_HANDLE_VALUE)  
    9.     {  
    10.         printf_s("创建进行快照失败 ");  
    11.         return -1;  
    12.     }  
    13.     else  
    14.     {  
    15.         PROCESSENTRY32 pe32;  
    16.         pe32.dwSize = sizeof(pe32);  
    17.         BOOL hProcess = Process32First(hProceessnap, &pe32);  
    18.         char buff[1024];  
    19.         while (hProcess)  
    20.         {  
    21.             wsprintf(buff, "进程名:%s--------------------进程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID);  
    22.             printf_s("%s ", buff);  
    23.             memset(buff, 0x00, 1024);  
    24.             hProcess = Process32Next(hProceessnap, &pe32);  
    25.         }  
    26.     }  
    27.     CloseHandle(hProceessnap);  
    28.   
    29.     return 0;  
    30. }  

    运行结果如下

     
  • 相关阅读:
    C++之用程序理解浅拷贝
    es6 | 新增语法 | 总结
    http协议 | http缓存
    Mobx | 强大的状态管理工具 | 可以用Mobx来替代掉redux
    nohup和&后台运行,进程查看及终止
    MIME Type介绍 Content-Type 各种定义
    Meta http-equiv属性详解(转)
    sublme text 3 快捷键
    【坑】【数组的坑】1、对象assign复制的假深度,2、数组slice复制的坑,3、还有数组map复制的坑
    Proxy监听对象的数据变化,处理绑定数据很有用
  • 原文地址:https://www.cnblogs.com/lizhigang/p/7324171.html
Copyright © 2011-2022 走看看