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

来源:互联网 发布:管家婆数据库搬移工具 编辑:程序博客网 时间:2024/04/16 14:55

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


原文链接:http://blog.csdn.net/nuptboyzhb/article/details/7373203

0 0
原创粉丝点击