如何根据PID获得进程名称
如题,这里的进程名称就是像任务管理器->进程 里的映像名称,比如xxx.exe这样
获得进程句柄也可以
[解决办法]
BOOL GetProcess(int nID)
{
CString strName;
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32={0};
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==(HANDLE)-1)
{
::MessageBox(NULL,"查询进程失败!:(","错误提示",MB_OK);
return FALSE;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32))
{
do
{
if(nID==pe32.th32ProcessID) //判断制定进程号
{
strName.Format("进程编号%d的进程名为:%s",nID,pe32.szExeFile);
AfxMessageBox(strName);
}
}
while(Process32Next(hProcessSnap,&pe32));
}
else
{
::MessageBox(NULL,"出现意外错误!","错误提示",MB_OK);
return FALSE;
}
CloseHandle(hProcessSnap);
return TRUE;
}
[解决办法]
OpenProcess
GetModuleFileNameEx or GetModuleBaseName
[解决办法]
这是一个根据exe名字获得PID的程序,你将里面的if条件换一下,应该就OK了:
void GetProcessIDByName(char *ProcessName, DWORD * ProcessID)
{
HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe = {0};
pe.dwSize = sizeof(pe);
BOOL bMore = ::Process32First(hSnapshot,&pe);
while(bMore)
{
if(0==strcmp(ProcessName, pe.szExeFile))
{
*ProcessID = pe.th32ProcessID;
break;
}
else
{
bMore = ::Process32Next(hSnapshot,&pe);
}
}
return;
}