C++通过进程名获得进程PID
2个回答
展开全部
用进程快照是可以的,以下代码你自己看着选你所需
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);
}
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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询