
mfc 获取系统进程的过程
用mfc编写一个获取系统进程的程序。请高手详细向我解释如何编写获取进程的思路。强调思路和执行过程。谢啦!...
用mfc编写一个获取系统进程的程序。请高手详细向我解释如何编写获取进程的思路。强调思路和执行过程。谢啦!
展开
1个回答
展开全部
获取系统进程要使用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的新特...
点击进入详情页
本回答由福州东方锐智提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询