美文网首页
遍历进程

遍历进程

作者: bluewind1230 | 来源:发表于2018-02-01 16:38 被阅读0次
#include <windows.h>
#include <tlhelp32.h>
#include <cstdio>
#include <iostream>
#include <psapi.h>

using std::wcout;


int main( )
{
    // 设置本地字符集
    setlocale( LC_ALL , "chs" );

    system( "pause" );

    // 1. 使用快照来遍历进程
    // 1.1 创建进程快照
    HANDLE hProcSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 );


    if( INVALID_HANDLE_VALUE == hProcSnap ) {
        printf( "创建进程快照失败\n" );
        return 0;
    }

    //typedef struct tagPROCESSENTRY32W
    //{
    //    DWORD   dwSize;                 // 结构体大小
    //    DWORD   cntUsage;               /// 不使用
    //    DWORD   th32ProcessID;          // this process
    //    ULONG_PTR th32DefaultHeapID;    /// 不使用
    //    DWORD   th32ModuleID;           /// 不使用
    //    DWORD   cntThreads;             // 进程的线程个数
    //    DWORD   th32ParentProcessID;    // 父进程ID
    //    LONG    pcPriClassBase;         // 进程优先级
    //    DWORD   dwFlags;                /// 不使用
    //    WCHAR   szExeFile[ MAX_PATH ];  // 进程名
    //} PROCESSENTRY32W;
    PROCESSENTRY32 processInfo ;

    // 初始化结构体的结构体字节字段
    processInfo.dwSize = sizeof( processInfo );

    // 获取第一个进程
    Process32First( hProcSnap , &processInfo );

    int i = 0;

    BOOL bTrue = FALSE;
    BOOL bRet = FALSE;
    TCHAR path[MAX_PATH];
    DWORD dwPathLengh = MAX_PATH;
    HANDLE hProc;


    do 
    {
        hProc = OpenProcess(PROCESS_QUERY_INFORMATION,/*打开的进程的权限*/
                            FALSE, /*打开进程得到的句柄是否继承给子进程*/
                            processInfo.th32ProcessID /*要打开的进程的ID*/
        );
        
        // 判断进行是否是32进程
        bRet = IsWow64Process(hProc,/*要判断的进程句柄*/
                              &bTrue/*输出值, 记录是否是32位进程,TRUE是32,FALSE为64*/
        );

        if (hProc == NULL)
            bRet = FALSE;

        // 将得到的进程信息输出
        wprintf(L"[%d],进程ID:%04d,父进程ID:%04d,进程优先级:%d,进  程名:%s[*%s]\n",
                i++,                                            //第一个参数
                processInfo.th32ProcessID,                      //第二个参数
                processInfo.th32ParentProcessID,                //第三个参数
                processInfo.pcPriClassBase,                    //第四个参数
                processInfo.szExeFile,                         //第五个参数
                (bRet && bTrue) ? L"32" : L"64");              //第六个参数,用三目运算符表示


        dwPathLengh = MAX_PATH;
        //if(GetProcessImageFileName(hProc, path, MAX_PATH))
        if (QueryFullProcessImageName(hProc, 0, path, &dwPathLengh))
        {
            wprintf(L"\t%s\n", path);
        }
        
        // 获取下一个进程
    } while (Process32Next(hProcSnap, &processInfo));


    system( "pause" );
}


相关文章

  • 进程的遍历、获取与销毁

    进程的遍历、获取与销毁 创建快照遍历 函数实现 进程的获取与销毁 exp:

  • 遍历进程

  • MFC_Task Manager

    MFC任务管理器说明书 一、完成基础功能如下: 1 遍历进程2 遍历线程3 遍历模块4 遍历堆5 结束进...

  • 模块隐藏

    模块隐藏 遍历模块 PEB (Process Environment Block 进程环境块)存放进程信息,每个进...

  • 杀死当前的进程

    获取当前所有的程序,按照名称遍历,杀死需要停止的进程.

  • 获取打开的文件的全路径(2)

    方法二: 搜索进程空间中的所有句柄,获取句柄的文件名即可。 1 首先遍历进程寻找打开文件的进程,比如 word.e...

  • 2019-08-23

    android 取地址 int read_maps(){ LOGE("开始遍历进程pid"); char fi...

  • Android procrank

    procrank是按照内存占用情况对进程进行排序。因为它需要遍历/proc下的所有进程获取内存占用情况,所以在运行...

  • 简单的求area服务器

    主要用到 !, receive...end , spawn/1 注意:receive收到信息之后会遍历进程邮箱来匹...

  • iOS基础知识小记

    1.swift中遍历删除指定的子数组 ? 注意startIndex和endIndex的使用。 2.进程间的通信方式...

网友评论

      本文标题:遍历进程

      本文链接:https://www.haomeiwen.com/subject/gzndzxtx.html