HANDLE hSnapProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//创建进程快照
HANDLE hSnapModule;
PROCESSENTRY32 pe;
MODULEENTRY32 me;
ZeroMemory(&me,sizeof(MODULEENTRY32));
ZeroMemory(&pe,sizeof(PROCESSENTRY32));
me.dwSize=sizeof(MODULEENTRY32);
pe.dwSize=sizeof(PROCESSENTRY32);
int pos=0;
Process32First(hSnapProcess,&pe);//从线程快照中读取第一个进程信息
CString strTemp;
do
{
hSnapModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID); //根据进程id创建模块快照
m_pListCtrl->InsertItem(pos,_T("")); //插入一个item
Module32First(hSnapModule,&me); //读取模块中的信息 只有一个模块。因为是根据具体进程创建的模块快照
m_pListCtrl->SetItemText(pos,0,pe.szExeFile); //设置的进程名
strTemp.Format(_T("%d"),pe.th32ProcessID);
m_pListCtrl->SetItemText(pos,1,strTemp); //进程id
strTemp.Format(_T("%d"),pe.cntThreads);
m_pListCtrl->SetItemText(pos,2,strTemp); //线程数
m_pListCtrl->SetItemText(pos,3,me.szExePath); //进程exe路径
} while (Process32Next(hSnapProcess,&pe));//读下一个进程
在写个关闭进程 的按钮
void CProcessManagerDlg::OnBnClickedButtonClose()
{
int iMark=m_pListCtrl->GetSelectionMark();
if(-1!=iMark)
{
CString str=m_pListCtrl->GetItemText(iMark,1);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,_wtoi(str));
DWORD dExitCode;
GetExitCodeProcess(hProcess,&dExitCode);
TerminateProcess(hProcess,dExitCode);
m_pListCtrl->DeleteItem(iMark);
str.Format(_T("%d"),--count);
GetDlgItem(IDC_STATIC_COUNT)->SetWindowText(str);
}
else
{
MessageBox(_T("没有选中进程"));
}
}
嘿嘿,看看这个图 还是挺好的。