用进程快照是可以的,以下代码你自己看着选你所需
void CLoaderDlg::UpdateProcessList()
{
UpdateData(TRUE);
m_ProcListDeleteAllItems();
MYHOOKSTRUCT ProcHookArry[20];
memset(ProcHookArry,0,20sizeof(MYHOOKSTRUCT));
int nCount = 0;
CString str="";
//Second=1;
PROCESSENTRY32 pe32;//进程信息结构体
pe32dwSize = 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(pe32szExeFile),"NOTEPADEXE")==0)
{
ProcHookArry[nCount]ProcessID=pe32th32ProcessID;
ProcHookArry[nCount]ThreadID=GetThreadId(pe32th32ProcessID);
ProcHookArry[nCount]hWnd=myGetWindowByProcessId(pe32th32ProcessID);
strcpy(ProcHookArry[nCount]Name,pe32szExeFile);
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,nCountsizeof(MYHOOKSTRUCT));
m_HookArryLen=nCount;
int index=0;
for(int n=0;n<m_HookArryLen;n++)
{
strFormat("%d",m_ProcHookArry[n]ThreadID);
index=m_ProcListGetItemCount();
m_ProcListInsertItem(index,str);
m_ProcListSetItemText(index,1,m_ProcHookArry[n]Name);
if(m_ProcHookArry[n]HookFlag)
{
str="已加载";
m_ProcListSetItemText(index,2,str);
}
else
{
str="未加载";
m_ProcListSetItemText(index,2,str);
}
char buf[100]={0};
::GetWindowText(m_ProcHookArry[n]hWnd,buf,100);
str=buf;
m_ProcListSetItemText(index,3,str);
//::SendMessage(m_ProcHookArry[n]hWnd,WM_CLOSE,0,0);
}
UpdateData(FALSE);
}
getpid(取得进程识别码)
相关函数 fork,kill,getpid
表头文件 #include<unistdh>
定义函数 pid_t getpid(void);
函数说明 getpid()用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。
返回值 目前进程的进程识别码
范例 #include<unistdh>
main()
{
printf(“pid=%d\n”,getpid());
}
执行 pid=1494 /每次执行结果都不一定相同/
以上就是关于C++通过进程名获得进程PID全部的内容,包括:C++通过进程名获得进程PID、linux除了popen外,获取其它进程PID的方法有哪些、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)