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("沒有選中進程"));
}
}
嘿嘿,看看這個圖 還是挺好的。