visual c++得到系统所有进程

    技术2022-05-11  59

    用CreateToolhelp32Snapshot/Process32First/Process32Next API枚举系统进程 在很多情况下需要对系统的进程进行操作,方法有很多种但最常用的是 CreateToolhelp32Snapshot/Process32First/Process32Next 一系列API使现结束进程使用 TerminateProcess使现 下面的函数可以使现对进程的枚举:   int ProcessList() {        PROCESSENTRY32 pe32;        pe32.dwSize=sizeof(pe32);        int count=0;          HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);          if(hProcessSnap==INVALID_HANDLE_VALUE)        {               printf("CreateToolhelp32Snapshot调用失败!");               return -1;        }          BOOL bMore=::Process32First(hProcessSnap,&pe32);               printf(" s/ts/n","进程名","PID");        printf("====================================/n");        while(bMore)        {               count++;               printf(" s/td/n",pe32.szExeFile,pe32.th32ProcessID);               bMore=::Process32Next(hProcessSnap,&pe32);        }          ::CloseHandle(hProcessSnap);          printf("====================================/n");        printf("/n当前系统进程数为:%d/n",count);          return 0; }   结束进程可以使用下面的函数:(使现其中dwid为想要结束的进程ID可通过列进程的函数得到)   int TerminateProcessFromId(DWORD dwId) {        BOOL bRet=FALSE;          HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);        if(hProcess!=NULL)        {               bRet=::TerminateProcess(hProcess,0);        }          ::CloseHandle(hProcess);          if(bRet)               printf("%d 进程结束成功....../n/n/n/n",dwId);        else               printf("%d 进程结束失败....../n/n/n/n",dwId);          return 0; }   与进程相关的操作通常还要提升权限,由关提升权限可以看偶的另一篇笔记《提升进程权限代码.》 由于代码相对比较简单,所以就没有更多的文字说明,关键的函数加了注释,其实使用时直接调用就OK了.

    最新回复(0)