通过名字寻找任务管理器中的进程

以下是关于怎样通过进程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编译通过。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值