mfc 获取系统进程的过程

用mfc编写一个获取系统进程的程序。请高手详细向我解释如何编写获取进程的思路。强调思路和执行过程。谢啦!... 用mfc编写一个获取系统进程的程序。请高手详细向我解释如何编写获取进程的思路。强调思路和执行过程。谢啦! 展开
 我来答
为何逸云
2013-10-17 · TA获得超过229个赞
知道小有建树答主
回答量:69
采纳率:0%
帮助的人:86.9万
展开全部

        获取系统进程要使用CreateToolhelp32Snapshot()函数得到快照,然后进行遍历,取出自己想要的信息就可以了。下面是我自己写的一个由进程名称得到进程ID的函数,要得到所有的进程,你只要把循环进行完就行。上代码:

DWORD CXXXDlg::GetProeccIDByName(CString& csProName)
{
//AddOutPut()是我自己封装的调试函数,可以不用理会
//使用CreateToolhelp32Snapshot()等函数要包含头文件
//#include <TlHelp32.h>

 AddOutPut(_T("->由进程名字得到进程ID开始..."));
 if (csProName.IsEmpty())
 {
  AddOutPut(_T("!!由进程名字得到进程ID失败,进程ID名字为空!"));
  return 0;
 }
 HANDLE hSnapShot = NULL;
 hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (INVALID_HANDLE_VALUE == hSnapShot)
 {
  AddOutPut(_T("!!由进程名字得到进程ID失败,创建快照失败!"));
  return 0;
 }
 int nPos = csProName.ReverseFind('\\');
 csProName = csProName.Right(csProName.GetLength() - nPos);
 PROCESSENTRY32 proEntry32 = {0};
 bool bRetval = false;
 bool bFind = false;
 proEntry32.dwSize = sizeof(PROCESSENTRY32);
 bRetval = Process32First(hSnapShot, &proEntry32) ? true : false;

 while (bRetval)
 {
  if (0 == StrCmpI(proEntry32.szExeFile, csProName))
  {
   bFind = true;
   break;
  }
  bRetval = Process32Next(hSnapShot, &proEntry32) ? true : false;
  proEntry32.dwSize = sizeof(PROCESSENTRY32);
 }
 if (!bFind)
 {
  AddOutPut(_T("!!由进程名字得到进程ID失败,未找到该进程!"));
  return 0;
 }
 if (hSnapShot != NULL)
 {
  CloseHandle(hSnapShot);
 }
 AddOutPut(_T("->由进程名字得到进程ID成功"));
 return proEntry32.th32ProcessID;
}
福州东方锐智
2025-03-26 广告
Java深度解决方案涉及多个方面。在企业应用开发中,可利用Java的跨平台性、高性能构建稳定系统。针对并发问题,可通过Java内存模型(JMM)及volatile关键字、synchronized同步块等确保线程安全。同时,借助Java的新特... 点击进入详情页
本回答由福州东方锐智提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式