我通过枚举进程,获取的PROCESSENTRY32植,怎样通过这个值得到每一个进程的路径,我是在WIN2000,或者 XP下.

解决方案 »

  1.   

    hProcess = OpenProcess(...)
    GetModuleFileNameEx(hProcess,...)
      

  2.   

    idProcess是你列举的进程的PID
    CString CProcessInfo::GetProcessPath( DWORD idProcess )
    {
        CString sPath;
        
        HANDLE hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                        FALSE, 
    idProcess );
        if( NULL != hProcess )
        {
            HMODULE hMod;
            DWORD cbNeeded;
            
            if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
            {
    DWORD dw = GetModuleFileNameEx( hProcess, hMod, sPath.GetBuffer( MAX_PATH ), MAX_PATH );
    sPath.ReleaseBuffer();
            }

        CloseHandle( hProcess );
        } return( sPath );
    }
      

  3.   

    楼上的方法是可行的,
    HANDLE h=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pid); //pid为 ROCESSENTRY32 中th32ProcessID
        HANDLE h=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,processInfo.th32ProcessID);
        if (h!=NULL)
          GetModuleFileNameEx(h,(void **)processInfo.th32ModuleID,buff,1024);
          else
            buff[0]=0;
    buff中为进程的全路径
    当然,GetModuleFileNameEx是windows 2k SDK 的psapi中函数
    -----------------------------
    进程ID及Module HANDLE也可用psapi中的EnumProcesses,EnumProcessModules得到如果你用过WMI的话,那有更详细的系统/进程信息
      

  4.   

    我的机器上怎么没有PSPAI的头文件和库文件,我应该把这两个文件拷贝到什么目录,编译后提示GetModuleFileNameEx这个函数未声明
      

  5.   

    hDLL = LoadLibrary("psapi.dll");
    if (hDLL != NULL)
    {
    GetModuleFileNameEx = (LPFNDLLFUNC1)GetProcAddres(hDLL, "GetModuleFileNameExA");
    }
      

  6.   

    42252343(大跃进的猪) 的方法是其一,那样要自已定义GetModuleFileNameEx 
    你还可以下载安装windows SDK,就有psapi.h及psapi.lib了
      

  7.   

    帮人帮到底,该到哪儿去下SDK?
      

  8.   

    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm