MFC获取系统的进程及列表控件使用

源代码: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();

你可能感兴趣的:(mfc)