C++搜索进程列表

C++搜索进程列表

首先获取当前系统快照

	HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		MessageBox("无法获取进程列表");
		return;
	}

CreateToolhelp32Snapshot函数原型如下

HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);

dwFlags参数表示获取快照的类型

常量意义
TH32CS_INHERIT表示该句柄可以被继承0x80000000
TH32CS_SNAPHEAPLIST表示获取th32ProcessID指定进程所有的堆0x00000001
TH32CS_SNAPPROCESS表示获取系统所有进程0x00000002
TH32CS_SNAPTHREAD表示获取系统所有线程0x00000004
TH32CS_SNAPMODULE表示获取th32ProcessID指定进程所有的模块0x00000008
TH32CS_SNAPALL表示获取系统所有进程和线程,以及h32ProcessID指定进程所有的堆和模块0x0000000f

th32ProcessID参数指定一个进程ID
返回值为快照句柄。

接着搜索进程列表。

	PROCESSENTRY32 pe32;
	pe32.dwSize = sizeof(pe32);
	BOOL have_more=::Process32First(hProcessSnap,&pe32);
	while(have_more)
	{
		int count = m_listview.GetItemCount();
		m_listview.InsertItem(count,"");
		char id[64];
		sprintf(id,"%d",pe32.th32ProcessID);
		char cnt[64];
		sprintf(cnt,"%d",pe32.cntThreads);
		char paid[64];
		sprintf(paid,"%d",pe32.th32ParentProcessID);
		m_listview.SetItemText(count,0,id);
		m_listview.SetItemText(count,1,pe32.szExeFile);
		m_listview.SetItemText(count,2,cnt);
		m_listview.SetItemText(count,3,paid);
		have_more=::Process32Next(hProcessSnap,&pe32);
	}

PROCESSENTRY32结构定义如下

typedef struct tagPROCESSENTRY32
{
    DWORD   dwSize;                 // 此结构大小,在调用Process32First前必须将dwSize大小初始化为sizeof(PROCESSENTRY32)
    DWORD   cntUsage;               // 无效,恒为0
    DWORD   th32ProcessID;          // 进程ID
    DWORD   th32DefaultHeapID;      // 无效,恒为0
    DWORD   th32ModuleID;           // 无效,恒为0
    DWORD   cntThreads;             // 进程所包含的线程数
    DWORD   th32ParentProcessID;    // 父进程ID
    LONG    pcPriClassBase;         // 此进程创建的线程默认优先权
    DWORD   dwFlags;                // 无效,恒为0
    CHAR    szExeFile[MAX_PATH];    // 进程全名,即映像名称
} PROCESSENTRY32;

Process32First原型为

BOOL WINAPI Process32First(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);

hSnapshot参数指定快照句柄
lppe参数指定PROCESSENTRY32结构体的地址,用作返回PROCESSENTRY32结构体
返回值表示是否返回了有效的PROCESSENTRY32结构体。

Process32Next原型为

BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);

参数和返回值与Process32First相同

最后,关闭快照句柄。

	::CloseHandle(hProcessSnap);

CloseHandle原型为

BOOL WINAPI CloseHandle(HANDLE hObject);

hObject参数表示需要关闭的句柄
返回值True表示成功,False表示失败。可以通过调用GetLastError函数获取错误信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值