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. }  

    运行结果如下

     
  • 相关阅读:
    Developers’ Musthave: the new Microsoft AllInOne Code Framework Sample Browser and 3500+ samples
    8774
    DCOM
    9个最棒的代码片段资源网站
    WCF中的几种地址总结
    如何用C#编写DCOM服务器
    C++ DCOM服务器和C#客户端互操作完全解释
    理解Prism中MVVM的Command与CommandParameter
    WCF REST 基础教程
    细说ASP.NET Forms身份认证
  • 原文地址:https://www.cnblogs.com/lizhigang/p/7324171.html
Copyright © 2011-2022 走看看