C++通过进程名获得进程PID

有什么WindowsAPI可以通过进程名获得进程PID,把代码贴上来吧,谢谢... 有什么Windows API可以通过进程名获得进程PID,把代码贴上来吧,谢谢 展开
 我来答
xiaohuh421
2009-12-20 · TA获得超过904个赞
知道小有建树答主
回答量:897
采纳率:0%
帮助的人:368万
展开全部
用进程快照是可以的,以下代码你自己看着选你所需
void CLoaderDlg::UpdateProcessList()
{
UpdateData(TRUE);
m_ProcList.DeleteAllItems();

MYHOOKSTRUCT ProcHookArry[20];
memset(ProcHookArry,0,20*sizeof(MYHOOKSTRUCT));
int nCount = 0;
CString str="";
//Second=1;

PROCESSENTRY32 pe32;//进程信息结构体
pe32.dwSize = sizeof(pe32);//必须先填充大小。
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBox("CreateToolhelp32Snapshot调用失败","Warning");
return;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
{
//注意:当列表框控件中选中了排序(sort)时会出现ID与程序名不一致。
if(strcmp(strupr(pe32.szExeFile),"NOTEPAD.EXE")==0)
{
ProcHookArry[nCount].ProcessID=pe32.th32ProcessID;
ProcHookArry[nCount].ThreadID=GetThreadId(pe32.th32ProcessID);
ProcHookArry[nCount].hWnd=myGetWindowByProcessId(pe32.th32ProcessID);
strcpy(ProcHookArry[nCount].Name,pe32.szExeFile);
ProcHookArry[nCount].hHook=0;
ProcHookArry[nCount].HookFlag=0;
nCount++;
}

bMore = ::Process32Next(hProcessSnap,&pe32);

}
::CloseHandle(hProcessSnap);
for(int i=0;i<nCount;i++)
{
for(int j=0;j<m_HookArryLen;j++)
{
if(ProcHookArry[i].ThreadID==m_ProcHookArry[j].ThreadID)
{
ProcHookArry[i].hHook=m_ProcHookArry[j].hHook;
ProcHookArry[i].hWnd=m_ProcHookArry[j].hWnd;
ProcHookArry[i].ProcessID=m_ProcHookArry[j].ProcessID;
ProcHookArry[i].HookFlag=m_ProcHookArry[j].HookFlag;
strcpy(ProcHookArry[i].Name,m_ProcHookArry[j].Name);
break;
}
}
}
memcpy(m_ProcHookArry,ProcHookArry,nCount*sizeof(MYHOOKSTRUCT));
m_HookArryLen=nCount;
int index=0;
for(int n=0;n<m_HookArryLen;n++)
{
str.Format("%d",m_ProcHookArry[n].ThreadID);
index=m_ProcList.GetItemCount();
m_ProcList.InsertItem(index,str);
m_ProcList.SetItemText(index,1,m_ProcHookArry[n].Name);
if(m_ProcHookArry[n].HookFlag)
{
str="已加载";
m_ProcList.SetItemText(index,2,str);
}
else
{
str="未加载";
m_ProcList.SetItemText(index,2,str);
}
char buf[100]={0};
::GetWindowText(m_ProcHookArry[n].hWnd,buf,100);
str=buf;
m_ProcList.SetItemText(index,3,str);
//::SendMessage(m_ProcHookArry[n].hWnd,WM_CLOSE,0,0);
}

UpdateData(FALSE);
}
therandomworld
2009-12-20 · TA获得超过812个赞
知道小有建树答主
回答量:724
采纳率:0%
帮助的人:542万
展开全部
CreateToolhelp32Snapshot()函数用来获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息;

TerminateProcess()函数用来停止某个正在运行的进程。

函数各参数具体含义,参见msdn
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式