windows7 C语言打印目前进程列表、删除一个进程、显示一个进程地址。

来源:互联网 发布:单片机cy标志为 编辑:程序博客网 时间:2024/06/06 00:24
#include <windows.h>#include <tlhelp32.h> // 声明快照函数的头文件#include <stdio.h>#include <stdlib.h> int main(int argc, char* argv[]){        //用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)      PROCESSENTRY32 pe32;          pe32.dwSize = sizeof(pe32);      PROCESSENTRY32 now;     // 给系统内的所有进程拍一个快照    // CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。    // TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);       if(hProcessSnap == INVALID_HANDLE_VALUE)        {                printf(" CreateToolhelp32Snapshot调用失败! ");                return -1;        }            // 遍历进程快照,轮流显示每个进程的信息        //用来 Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32-pe32中。    BOOL bMore = Process32First(hProcessSnap, &pe32);        while(bMore)        {                printf(" 进程ID号:%10u  进程名称:%20s  线程数目: %d \n ", pe32.th32ProcessID,pe32.szExeFile,pe32.cntThreads);                bMore = Process32Next(hProcessSnap, &pe32);  //用Process32Next指向下一条进程信息。      }     int x;    printf("当前进程信息已经打印完毕,请选择想要的功能:\n");    printf(" 1、删除某个指定的进程 2、查询某进程是否存在 3、显示某进程的地址\n");    scanf("%d",&x);        if(x==1){               printf("请输入想关闭的进程的PID\n");    scanf("%u",&now.th32ProcessID);//now.th32parentprocessid存放选择的进程号      system("cls");    printf("您想关闭的进程信息如下:\n");    BOOL aMore = Process32First(hProcessSnap, &pe32);        while(aMore)        {            if(pe32.th32ProcessID == now.th32ProcessID){            printf(" 进程ID号:%10u  进程名称:%30s \n   ", pe32.th32ProcessID,pe32.szExeFile);              break;        }       else       {       aMore = Process32Next(hProcessSnap, &pe32);        }     }    HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);    if(hProcess==NULL)        return FALSE;    if(!TerminateProcess(hProcess,0))        return FALSE;    printf("\n您的进程已经关闭成功\n");        }        else if(x==2){     printf("请输入您想查询是否存在的进程的名字 .exe\n");    scanf("%s",&now.szExeFile);//now.th32parentprocessid存放选择的进程号      BOOL cMore = Process32First(hProcessSnap, &pe32);        int a=0;        while(cMore)        {            if(strcmp(pe32.szExeFile,now.szExeFile) ==0 ){            printf(" 存在该进程 且PID =%u  ", pe32.th32ProcessID);              a=0;            break;        }       else       {        a++;      cMore = Process32Next(hProcessSnap, &pe32);        }     }    if(a!=0){    printf("该进程不存在\n");}        }        else if(x==3){    printf("请输入需要查看地址的进程名字 .exe\n");    scanf("%s",&now.szExeFile);    BOOL dMore = Process32First(hProcessSnap, &pe32);           while(dMore)        {            if(strcmp(pe32.szExeFile,now.szExeFile) ==0 ){            break;        }       else       {       dMore = Process32Next(hProcessSnap, &pe32);        }           }    MODULEENTRY32 pes;     HANDLE hfilename = NULL ;      hfilename = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE , pe32.th32ProcessID );       if (hfilename == NULL )          {              printf("文件名字访问失败!");          }          BOOL i = Module32First(hfilename , &pes);          printf("文件路径:   %s \n" , pes.szExePath);      //system(pes.szExePath);        }        else{            printf("功能还在完善\n");        }    return 0;}
原创粉丝点击