processentry32(Process32First 遍历系统进程列表 C语言,)

中国机械与配件网3380

这篇文章给大家聊聊关于processentry32,以及Process32First 遍历系统进程列表 C语言,对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

Process32First 遍历系统进程列表 C语言,

processentry32(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);

好了,文章到此结束,希望可以帮助到大家。