以下是关于怎样通过进程name来查找进程ID的代码。
BOOL FindProcessIDByName()
{CString szexeName = _T("");
PROCESSENTRY32* info = new PROCESSENTRY32; //创建进程信息变量,用于保存信息
info->dwSize = sizeof(PROCESSENTRY32); //设置块大小
int i = 0;
int nindex = 0;
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建当前快照列表
m_PidList.DeleteAllItems(); //m_PidList 列表控件
m_selAllCheck.SetCheck(BST_UNCHECKED);
m_PidEdit.GetWindowText(szexeName); //szexeName 就是输入的进程名
szexeName.MakeUpper(); //这里是不区分大小写来查找
//szexeName.Append(_T(".exe"));
nSelItem = 0;
if (szexeName.GetLength() == 0)
{
AfxMessageBox(_T("Please enter the process name you want to kill !!!"));
CButton* m_Searchbtn=(CButton *)GetDlgItem(IDC_GET_PID_BUTTON);
m_Searchbtn->SetFocus();
CloseHandle(handle);//关闭进程句柄
return FALSE;
}
else
{
//memcpy(info->szExeFile, szexeName.GetBuffer(szexeName.GetLength()), szexeName.GetLength() + 2);
if(Process32First(handle,info))//开始枚举进程
{
if(GetLastError()== ERROR_NO_MORE_FILES )
{
AfxMessageBox(_T("No More Process!!!"));
CloseHandle(handle); //关闭进程句柄
return FALSE;
}
else
{
CString Id = _T("");
CString Name = _T("");
//this is used to find all process
#if 0
if (memcmp(info->szExeFile, szexeName.GetBuffer(szexeName.GetLength()), szexeName.GetLength()) == 0)
{
Id.Format(_T("%d"), info->th32ProcessID); //获取当前进程ID
m_PidList.InsertItem(nindex, Id); //插入一个项目
m_PidList.SetItemData(nindex, info->th32ProcessID); //设置项目值
Name.Format(_T("%s"), info->szExeFile); //获取当前进程名
m_PidList.SetItemText(nindex, 1, Name); //设置名
nindex++;
i++;
}
#endif
// this is used to find the specific process by exe name
Name.Format(_T("%s"), info->szExeFile); //获取当前进程名
Name.MakeUpper();
if (Name.Find(szexeName) == 0)
{
Id.Format(_T("%d"), info->th32ProcessID); //获取当前进程ID
m_PidList.InsertItem(nindex, Id); //插入一个项目
m_PidList.SetItemData(nindex, info->th32ProcessID); //设置项目值
Name.Format(_T("%s"), info->szExeFile); //获取当前进程名
m_PidList.SetItemText(nindex, 1, Name); //设置名
nindex++;
i++;
}
while(Process32Next(handle,info)!= FALSE) //继承获取进程
{
#if 0
if (memcmp(info->szExeFile, szexeName.GetBuffer(szexeName.GetLength()), szexeName.GetLength()) == 0)
{
Id.Format(_T("%d"), info->th32ProcessID); //获取当前进程ID
m_PidList.InsertItem(nindex, Id); //插入一个项目
m_PidList.SetItemData(nindex, info->th32ProcessID); //设置项目值
Name.Format(_T("%s"), info->szExeFile); //获取当前进程名
m_PidList.SetItemText(nindex, 1, Name); //设置名
nindex++;
i++;
}
#endif
Name.Format(_T("%s"), info->szExeFile); //获取当前进程名
Name.MakeUpper();
if (Name.Find(szexeName) == 0)
{
Id.Format(_T("%d"),info->th32ProcessID); //获取当前进程ID
m_PidList.InsertItem(nindex,Id); //插入一个项目
m_PidList.SetItemData(nindex,info->th32ProcessID); //设置项目值
Name.Format(_T("%s"),info->szExeFile); //获取当前进程名
m_PidList.SetItemText(nindex,1,Name); //设置名
nindex++;
i++;
}
else
{
i++;
continue;
}
}
}
}
CloseHandle(handle);//关闭进程句柄
return TRUE;
}
}
本代码在VS2010编译通过。