`

C++如何获取系统进程列表

    博客分类:
  • C++
阅读更多

 

PROCESSENTRY32 pe32;
	// 在使用这个结构之前,先设置它的大小
	pe32.dwSize = sizeof(pe32); 
	
	// 给系统内的所有进程拍一个快照
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		printf(" CreateToolhelp32Snapshot调用失败! \n");
		return;
	}
	
	// 遍历进程快照,轮流显示每个进程的信息
	BOOL bMore = ::Process32First(hProcessSnap, &pe32);
	while(bMore)
	{
		printf(" 进程名称:%s \n", pe32.szExeFile);
		printf(" 进程ID号:%u \n\n", pe32.th32ProcessID);

		bMore = ::Process32Next(hProcessSnap, &pe32);
	}

	// 不要忘记清除掉snapshot对象
	::CloseHandle(hProcessSnap);

	char a;
	std::cin >> a;
	return;

 

注:我在VS2008调试该程序的时候,输出的进程名称总是名称的第一个字符,眼看%s也对啊,后来看了下pe32,szExeFile的数据类型是WCHAR数组,这是因为VS2008默认的字符集是Unicode,只要在工程属性里做如下设置: 配置属性 --> 常规 --> 将“字符集 ”改为未设置 即可。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics