请问各位大虾,如何获得一个进程下边的所有的子进程啊?进程名和id都行

解决方案 »

  1.   

    #include <windows.h>
    #include <tlhelp32.h>
    #include <stdio.h>BOOL RefreshThreadList (DWORD dwOwnerPID) 

        HANDLE        hThreadSnap = NULL; 
        BOOL          bRet        = FALSE; 
        THREADENTRY32 te32        = {0}; 
     
        // Take a snapshot of all threads currently in the system.     hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); 
        if (hThreadSnap == INVALID_HANDLE_VALUE) 
            return (FALSE); 
     
        // Fill in the size of the structure before using it.     te32.dwSize = sizeof(THREADENTRY32); 
     
        // Walk the thread snapshot to find all threads of the process. 
        // If the thread belongs to the process, add its information 
        // to the display list.
     
        if (Thread32First(hThreadSnap, &te32)) 
        { 
            do 
            { 
                if (te32.th32OwnerProcessID == dwOwnerPID) 
                { 
                    printf( "\nTID\t\t%d\n", te32.th32ThreadID); 
                    printf( "Owner PID\t%d\n", te32.th32OwnerProcessID); 
                    printf( "Delta Priority\t%d\n", te32.tpDeltaPri); 
                    printf( "Base Priority\t%d\n", te32.tpBasePri); 
                } 
            } 
            while (Thread32Next(hThreadSnap, &te32)); 
            bRet = TRUE; 
        } 
        else 
            bRet = FALSE;          // could not walk the list of threads 
     
        // Do not forget to clean up the snapshot object.     CloseHandle (hThreadSnap); 
     
        return (bRet); 
      

  2.   

    你给的这个是list进程的线程啊,我说的是父进程与子进程.
    有人跟我说没有这种从属关系,但是我用july看的,如msnmsgr.exe,他的父进程是explorer.exe
      

  3.   

    void   EnumSonProcess()
      {   
    DWORD pid = ; // the id of father process
        HANDLE   hSnapshot   =   ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);   
        
        PROCESSENTRY32   pe;   
        ::ZeroMemory(&pe,sizeof(pe));   
        pe.dwSize   =   sizeof(pe);   
        
        BOOL   bMore   =   ::Process32First(hSnapshot,&pe);   
        
        while(bMore)
    {   //循环到没有   
           HANDLE   hProcess   =   ::OpenProcess(    PROCESS_QUERY_INFORMATION,    FALSE,pe.th32ProcessID);   
       if((hProcess   !=   NULL) &&(pe.th32ParentProcessID == pid))
           {   
     
       printf( "\nTID\t\t%d\n", pe.th32ProcessID ); 
           }   
          ::CloseHandle(hProcess);   
        
         //移到下一个进程   
         bMore   =   ::Process32Next(hSnapshot,&pe);   
        }   
      }