HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(SnapShot==NULL)
{
MessageBox("检测当前进程失败!");
return FALSE;
}
SHFILEINFO shSmall;
int nIndex;
CString str,prcnum;
PROCESSENTRY32 ProcessInfo;//声明进程信息变量
ProcessInfo.dwSize=sizeof(ProcessInfo);//设置ProcessInfo的大小
//返回系统中第一个进程的信息
BOOL Status=Process32First(SnapShot,&ProcessInfo);
int m_nProcess=0,num=0;
while(Status)
{
m_nProcess++;
num++;
//获取进程文件信息
SHGetFileInfo(ProcessInfo.szExeFile,0,&shSmall,
sizeof(shSmall),SHGFI_ICON|SHGFI_SMALLICON);
//在列表控件中添加映像名称
nIndex=m_list.InsertItem(m_nProcess,ProcessInfo.szExeFile);
//获取下一个进程的信息
Status=Process32Next(SnapShot,&ProcessInfo);
}
在winxp下ProcessInfo.szExeFile只能得到进程的名字,要想得到进程的路径,可用下面的函数得到
BOOL GetProcessModule(DWORD dwPID,DWORD dwModuleID,LPMODULEENTRY32 lpMe32,DWORD cbMe32)
{
BOOL bRet=FALSE;
BOOL bFound=FALSE;
HANDLE hModuleSnap=NULL;
MODULEENTRY32 me32={0};
hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if(hModuleSnap==(HANDLE)-1)
return(false);
me32.dwSize=sizeof(MODULEENTRY32);
if(Module32First(hModuleSnap,&me32))
{
do
{
if(me32.th32ModuleID==dwModuleID)
{
CopyMemory(lpMe32,&me32,cbMe32);
bFound=true;
}
}
while(!bFound&&Module32Next(hModuleSnap,&me32));
bRet=bFound;
}
else
bRet=false;
CloseHandle(hModuleSnap);
return(bRet);
}