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

#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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值