HANDLE hSnapProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//創(chuàng)建進程快照
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); //根據(jù)進程id創(chuàng)建模塊快照
m_pListCtrl->InsertItem(pos,_T("")); //插入一個item
Module32First(hSnapModule,&me); //讀取模塊中的信息 只有一個模塊。因為是根據(jù)具體進程創(chuàng)建的模塊快照
m_pListCtrl->SetItemText(pos,0,pe.szExeFile); //設(shè)置的進程名
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); //線程數(shù)
m_pListCtrl->SetItemText(pos,3,me.szExePath); //進程exe路徑
} while (Process32Next(hSnapProcess,&pe));//讀下一個進程
在寫個關(guān)閉進程 的按鈕
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("沒有選中進程"));
}
}
嘿嘿,看看這個圖 還是挺好的。