进程枚举 toolhelp32snapshot

先是要创建一个process的快照, 用api ,  CreateToolhelp32Snapshot 

 

HANDLE WINAPI CreateToolhelp32Snapshot(
  DWORD dwFlags,
  DWORD th32ProcessID
);

 

dwFlags 包括对多种东西的枚举, 进程线程模块啥的, 这里选 TH32CS_SNAPPROCESS

关于 th32processID

th32ProcessID
[in] Process identifier of the process to be included in the snapshot. This parameter can be zero to indicate the current process. This parameter is used when the TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, or TH32CS_SNAPALL value is specified. Otherwise, it is ignored and all processes are included in the snapshot.

也就是说,这个参数值进程枚举时应该选 0,另外这个函数失败时返回  INVALID_HANDLE_VALUE ,在用之前必须判断一下

之后是 Process32First

 
 
BOOL WINAPI Process32First(
  HANDLE hSnapshot,
  LPPROCESSENTRY32 lppe
);

LPPROCESSENTRY32 是我们想要得到的结构体,

 

typedef  struct  tagPROCESSENTRY32  {
  DWORD dwSize;  DWORD cntUsage;  DWORD th32ProcessID;  ULONG_PTR th32DefaultHeapID;  DWORD th32ModuleID;  DWORD cntThreads;  DWORD th32ParentProcessID;  LONG pcPriClassBase;  DWORD dwFlags;  TCHAR szExeFile[MAX_PATH];
}
 PROCESSENTRY32,  * PPROCESSENTRY32;

再用Process32Next 参数和Process32First一样, 得到下一个进程的LPPROCESSENTRY32

完整的;

 

#include  < windows.h >
#include 
< stdio.h >
#include 
< tlhelp32.h >
int  main ( int  argc, char   * argv[]) 
{
    PROCESSENTRY32 pe32;
    pe32.dwSize 
= sizeof(pe32);
    HANDLE hProcessSnap 
= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    
if (hProcessSnap == INVALID_HANDLE_VALUE)
    
{
        printf(
"Create snap failed. error=%d  ",::GetLastError());
        
        
return -1;

    }

    BOOL bMore 
= ::Process32First(hProcessSnap,&pe32);
    
while(bMore)
    
{
        printf(
"%-20s%u ",pe32.szExeFile,pe32.th32ProcessID);
        bMore 
= ::Process32Next(hProcessSnap,&pe32);
    }

    ::CloseHandle(hProcessSnap);


    
    
return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值