这篇文章给大家聊聊关于processentry32,以及Process32First 遍历系统进程列表 C语言,对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
Process32First 遍历系统进程列表 C语言,
#include<Tlhelp32.h>
#include<Psapi.h>
#pragmacomment(lib,"Psapi.lib")
BOOLGetProcessList()
{
BOOLbResult=FALSE;
HANDLEhSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnap==INVALID_HANDLE_VALUE)
returnFALSE;
intidx=0;
CStringstrID;
HANDLEhProcess=NULL;
PROCESSENTRY32info={0};
info.dwSize=sizeof(PROCESSENTRY32);
BOOLbRet=Process32First(hSnap,&info);
while(bRet){
idx=m_TaskList.InsertItem(m_TaskList.GetItemCount(),_T(""));
m_TaskList.SetItemText(idx,0,info.szExeFile);
strID.Empty();
strID.Format(_T("%d"),info.th32ProcessID);
m_TaskList.SetItemText(idx,1,strID);
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,info.th32ProcessID);
if(hProcess){
TCHARszPath[MAX_PATH]={0};
GetModuleFileNameEx(hProcess,NULL,szPath,MAX_PATH);
m_TaskList.SetItemText(idx,2,szPath);
}
bRet=Process32Next(hSnap,&info);
}
returnTRUE;
}
用快照行吧,这个函数可以满足你
PROCESSENTRY32类中的pcPriClassBase是干什么的
PROCESSENTRY32结构如下:
typedefstructtagPROCESSENTRY32{
DWORDdwSize;//结构大小;
DWORDcntUsage;//此进程的引用计数;
DWORDth32ProcessID;//进程ID;
DWORDth32DefaultHeapID;//进程默认堆ID;
DWORDth32ModuleID;//进程模块ID;
DWORDcntThreads;//此进程开启的线程计数;
DWORDth32ParentProcessID;//父进程ID;
LONGpcPriClassBase;//线程优先权;
DWORDdwFlags;//保留;
charszExeFile[MAX_PATH];//进程全名;
}PROCESSENTRY32;
求详细介绍Process32First这个API函数及其参数的用法
process32First是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄.其原型为(用的是vfp)DECLAREINTEGERProcess32FirstINWIN32API;INTEGERhSnapshot,STRING@lppe在C语言中如下BOOLWINAPIProcess32First(HANDLEhSnapshot,LPPROCESSENTRY32lppe);此函数往往和Process32Next(HandlehsnapShot,LPPROCESSENTRY32lppe)搭配使用,用来枚举当前系统快照相关的所有进程。这些只是一点点,如有更好的解说,请告诉我,谢谢!vb实例PrivateTypePROCESSENTRY32dwSizeAsLongcntUseageAsLongth32ProcessIDAsLongth32DefaultHeapIDAsLongth32ModuleIDAsLongcntThreadsAsLongth32ParentProcessIDAsLongpcPriClassBaseAsLongswFlagsAsLongszExeFileAsString*1024EndTypePrivateSubdemo()DimMySnapHandleAsLongDimProcessInfoAsPROCESSENTRY32MySnapHandle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)ProcessInfo.dwSize=Len(ProcessInfo)IfProcess32First(MySnapHandle,ProcessInfo)<>0Then'用来判断快照MySnapHandle成功获得进程信息endifendsub===============================================================================C/C++Code:PROCESSENTRY32*info;//在使用这个结构之前,先设置它的大小info->dwSize=sizeof(PROCESSENTRY32);charproName[]={"devenv.exe"};HANDLEhandlePro=NULL;//结束进程句柄//给系统内的所有进程拍一个快照HANDLEhProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if(hProcessSnap==INVALID_HANDLE_VALUE){printf("CreateToolhelp32Snapshot调用失败!\n");return-1;}//遍历进程快照,轮流显示每个进程的信息BOOLbMore=::Process32First(hProcessSnap,info);BOOLterminate=FALSE;while(bMore!=FALSE){if(strcmp(proName,info->szExeFile)==0){handlePro=OpenProcess(PROCESS_TERMINATE,FALSE,info->th32ProcessID);if(NULL==handlePro){break;}//结束进程terminate=TerminateProcess(handlePro,0);}bMore=Process32Next(hProcessSnap,info);}::CloseHandle(hProcessSnap);
好了,文章到此结束,希望可以帮助到大家。