zoukankan      html  css  js  c++  java
  • 进程的监听

    一.进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础

    C++监听进程状态:首先加载#include "tlhelp32.h"头文件

    主要函数:CreateToolhelp32Snapshot(

              DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等
              DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0
              );
    dwFlags:
    指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。
    TH32CS_INHERIT - 声明快照句柄是可继承的。
    TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程
    TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。
    TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。
    TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。
    TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程
    Const TH32CS_SNAPHEAPLIST = &H1
    Const TH32CS_SNAPPROCESS = &H2
    Const TH32CS_SNAPTHREAD = &H4
    Const TH32CS_SNAPMODULE = &H8
    Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
    Const TH32CS_INHERIT = &H80000000
     
    th32ProcessID:

     

    指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
     
    调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE
     
    代码:
    #include "stdafx.h"
    #include "Windows.h"
    #include "tlhelp32.h"
    #include "process.h"
    
    void main()
    {
        //获取进程信息快照,如果要获取进程列表则第二个参数为0
        HANDLE handle;
        while(1)
        {
            handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //获取线程列表
            if(handle == INVALID_HANDLE_VALUE)
            {
                cout<<"CreateToolhelp32Snapshot start is fail..."<<endl;
                getchar();
                return ;
            }
            cout<<"监听开始..."<<endl;
            PROCESSENTRY32 pe32;
            pe32.dwSize = sizeof(PROCESSENTRY32);
        
            //获取第一个进程的句柄
            BOOL bMore = Process32First(handle,&pe32);  //获取第一个线程句柄放到pe32
            int i = 0;
            cout<<"PID	线程数	进程名字"<<endl;
            
            while(bMore)
            {
                wchar_t *ch = pe32.szExeFile;   //szExeFile Window下的宽字节
                cout<<pe32.th32ProcessID<<"	"<<pe32.cntThreads<<"	";
                wcout<<ch<<endl;  //输出的时候注意
                //如果用printf则需要用wprintf(L"%s
    ",ch);
                i++;
                bMore = Process32Next(handle,&pe32);
            }
            CloseHandle(handle);
            Sleep(500);  //线程挂起500ms
            system("cls");
        }
    
        getchar();
        return;
    }

    显示结果:

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/mypsq/p/5041578.html
Copyright © 2011-2022 走看看