C/C++遍曆進程和進程ID的小工具

來源:互聯網
上載者:User

標籤:share   mem   window   ase   pid   max   hot   print   線程   

原文: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("建立進行快照失敗\n");  
  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\n", buff);  
  23.             memset(buff, 0x00, 1024);  
  24.             hProcess = Process32Next(hProceessnap, &pe32);  
  25.         }  
  26.     }  
  27.     CloseHandle(hProceessnap);  
  28.   
  29.     return 0;  
  30. }  

運行結果如下

 

 
1

C/C++遍曆進程和進程ID的小工具

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.