zoukankan      html  css  js  c++  java
  • C++获取当前所有进程的完整路径

    实现代码

    #include <stdio.h>
    #include <windows.h>
    #include <tlhelp32.h>
    #include <string>
    #include <tchar.h>
    #include <Psapi.h>
    #pragma comment (lib,"Psapi.lib")
     
    BOOL DosPathToNtPath(LPTSTR pszDosPath, LPTSTR pszNtPath)
    {
        TCHAR            szDriveStr[500];
        TCHAR            szDrive[3];
        TCHAR            szDevName[100];
        INT                cchDevName;
        INT                i;
         
        //检查参数
        if(!pszDosPath || !pszNtPath )
            return FALSE;
     
        //获取本地磁盘字符串
        if(GetLogicalDriveStrings(sizeof(szDriveStr), szDriveStr))
        {
            for(i = 0; szDriveStr[i]; i += 4)
            {
                if(!lstrcmpi(&(szDriveStr[i]), _T("A:\")) || !lstrcmpi(&(szDriveStr[i]), _T("B:\")))
                    continue;
     
                szDrive[0] = szDriveStr[i];
                szDrive[1] = szDriveStr[i + 1];
                szDrive[2] = '';
                if(!QueryDosDevice(szDrive, szDevName, 100))//查询 Dos 设备名
                    return FALSE;
     
                cchDevName = lstrlen(szDevName);
                if(_tcsnicmp(pszDosPath, szDevName, cchDevName) == 0)//命中
                {
                    lstrcpy(pszNtPath, szDrive);//复制驱动器
                    lstrcat(pszNtPath, pszDosPath + cchDevName);//复制路径
     
                    return TRUE;
                }           
            }
        }
     
        lstrcpy(pszNtPath, pszDosPath);
         
        return FALSE;
    }
    //获取进程完整路径
    BOOL GetProcessFullPath(DWORD dwPID, TCHAR pszFullPath[MAX_PATH])
    {
        TCHAR        szImagePath[MAX_PATH];
        HANDLE        hProcess;
        if(!pszFullPath)
            return FALSE;
     
        pszFullPath[0] = '';
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwPID);
        if(!hProcess)
            return FALSE;
     
        if(!GetProcessImageFileName(hProcess, szImagePath, MAX_PATH))
        {
            CloseHandle(hProcess);
            return FALSE;
        }
     
        if(!DosPathToNtPath(szImagePath, pszFullPath))
        {
            CloseHandle(hProcess);
            return FALSE;
        }
     
        CloseHandle(hProcess);
     
        _tprintf(_T("%d,%s 
    "),dwPID,pszFullPath);
        return TRUE;
    }
    int main(int argc, char* argv[])
    {
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (INVALID_HANDLE_VALUE == hSnapshot)
        {
            return NULL;
        }
        PROCESSENTRY32 pe ={0};
        pe.dwSize = sizeof(PROCESSENTRY32); 
     
        BOOL fOk;
        for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
        {
            TCHAR szProcessName[MAX_PATH] = {0};
            GetProcessFullPath(pe.th32ProcessID, szProcessName);
        }
        return 0;
    }
    

    截图

    参考

    https://bbs.csdn.net/topics/390937481

  • 相关阅读:
    MyBatis学习总结——MyBatis快速入门
    Java网络socket编程详解
    java中导出EXCEL表格
    利用反射将xml转换为List<Object>
    Java中将xml转为List<实体类>
    JavaWeb | 之 | 角色管理的表结构设计和原理
    fastjson把对象转化成json避免$ref
    JSON解析(DATE)对象数据
    jstl中<c:forEach>的用法
    请求转发与请求重定向的区别
  • 原文地址:https://www.cnblogs.com/17bdw/p/10355793.html
Copyright © 2011-2022 走看看