源代码:http://download.csdn.net/detail/nuptboyzhb/4156430
获取进程的步骤:
主要应该一下函数:
CreateToolhelp32Snapshot()
Process32First
Process32Next
CloseHandle
1. 添加头文件#include<tlhelp32.h>
2. 在获取函数体中添加下列代码:
m_listctrl.DeleteAllItems();
HANDLE hSnapshot;//定义一个句柄
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// 创建系统快照
PROCESSENTRY32 pe;
Process32First(hSnapshot,&pe);
CString str;
int i=0;
do
{ //将PE的值显示出来
m_listctrl.InsertItem(i,pe.szExeFile);//插入进程名
str.Format("%d",pe.th32ProcessID);
m_listctrl.SetItemText(i,1,str);
str.Format("%d",pe.cntUsage);
m_listctrl.SetItemText(i,2,str);
str.Format("%d",pe.th32DefaultHeapID);
m_listctrl.SetItemText(i,3,str);
str.Format("%d",pe.th32ModuleID);
m_listctrl.SetItemText(i,4,str);
str.Format("%d",pe.cntThreads);
m_listctrl.SetItemText(i,5,str);
str.Format("%d",pe.th32ParentProcessID);
m_listctrl.SetItemText(i,6,str);
str.Format("%d",pe.pcPriClassBase);
m_listctrl.SetItemText(i,7,str);
i++;
}while(Process32Next(hSnapshot,&pe));//获取下一个
CloseHandle(hSnapshot);//关闭
str.Format("%d",i);
SetDlgItemText(IDC_CNT,str);
列表框显示的问题:
1. 创建一个列表控件,并关联一个 CListCtrl m_listctrl;成员变量;并设置列表控件的属性:在样式标签页中的查看方式设置为:报告 排列:顶端 排序:无
2. 在OnInitDialog()函数中对列表控件进行初始化:插入8列,用于记录进程实体的信息;
char *tab[8]={"进程","PID","cntUsage","th32DefaultHeapID",
"th32ModuleID","cntThreads","th32ParentProcessID",
"pcPriClassBase"};
for (int i=0;i<8;i++)
{
m_listctrl.InsertColumn(i,tab[i],LVCFMT_LEFT,80);
}
3. 在获取按钮的响应函数中记录信息;参见上面的代码;
4. 获得‘被选中’的项的值
为列表控件添加OnItemchanged的消息响应函数,在消息响应函数中,编辑代码如下:
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
for(int i=0; i<m_listctrl.GetItemCount(); i++)//遍历整个列表视图
{
if(m_listctrl.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED ) //获取选中行
{
CString str="";
str=m_listctrl.GetItemText(i,1);//获得被选中的那个一行的第二个数据PID SelPID=(DWORD)atoi(str);//将数据转化为数字
UpdateData(false);
}
}
*pResult = 0;
注:SelPID为自定义的DWORD类型的成员变量,用于记录被选中的进程的ID号,为结束进程传递ID号;
结束进程
HANDLE hProcess;
// 打开进程
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,SelPID);
if(hProcess)
{
if(!TerminateProcess(hProcess,0))
{
CString strError;
strError.Format("错误号:%d",GetLastError());
AfxMessageBox(strError,MB_OK|MB_ICONINFORMATION,NULL);
}
}
else
{
CString strError;
strError.Format("错误号:%d",GetLastError());
if(GetLastError()==ERROR_ACCESS_DENIED)
strError=_T("拒绝访问!")+strError;
AfxMessageBox(strError,MB_OK|MB_ICONINFORMATION,NULL);
}
Sleep(300);
OnRefresh();