如何枚举出所有进程和线程以及进程信息

下图是程序运行结果和在cmd下使用tasklist得到的效果图:

如何枚举出所有进程和线程以及进程信息

以下是代码:

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <Psapi.h>
#pragma comment(lib,"psapi.lib")
using namespace std;
void EnumThreadID(DWORD dwProcessId){
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,dwProcessId);
THREADENTRY32 te32 = {0};
te32.dwSize = sizeof(te32);
BOOL bRet = Thread32First(hSnapshot,&te32);
while((bRet = Thread32Next(hSnapshot,&te32))){
if(dwProcessId == te32.th32OwnerProcessID)
cout << "\t->|线程ID:" << te32.th32ThreadID << endl;

}
CloseHandle(hSnapshot);
}
DWORD GetUsedMemory(DWORD dwProcessId){
PROCESS_MEMORY_COUNTERS pmc = {0};
DWORD dwSize = 0;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
if(hProcess == INVALID_HANDLE_VALUE){
return -1;
}
BOOL bRet = GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc));
if(!bRet)
return -1;
CloseHandle(hProcess);
return pmc.WorkingSetSize / 1024;
}
void EnumProcessInfo(){
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof(pe32);


BOOL bRet = Process32First(hSnapshot,&pe32);
while((bRet = Process32Next(hSnapshot,&pe32))){
cout << "进程名称:" << pe32.szExeFile << "\t进程ID:" << pe32.th32ProcessID << 
"\t线程数:" << pe32.cntThreads;
cout << "\t内存使用:" << GetUsedMemory(pe32.th32ProcessID) << "K" << endl;
EnumThreadID(pe32.th32ProcessID);
}


CloseHandle(hSnapshot);
}


int main(void){
EnumProcessInfo();
return 0;
}