Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как программно получить список процессов


Автор: Admin 4.12.2004, 18:57
Автор:http://www.forum.vingrad.ru/cgi-bin/newforum/ikonboard.cgi?act=Profile;CODE=03;MID=65-1025616640

RTFM неплохо бы иногда. Прямо оттуда.

Код

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

BOOL GetProcessList () 

   HANDLE         hProcessSnap = NULL; 
   BOOL           bRet      = FALSE; 
   PROCESSENTRY32 pe32      = {0}; 

   //  Take a snapshot of all processes in the system. 

   hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

   if (hProcessSnap == INVALID_HANDLE_VALUE) 
       return (FALSE); 

   //  Fill in the size of the structure before using it. 

   pe32.dwSize = sizeof(PROCESSENTRY32); 

   //  Walk the snapshot of the processes, and for each process, 
   //  display information. 

   if (Process32First(hProcessSnap, &pe32)) 
   { 
       DWORD         dwPriorityClass; 
       BOOL          bGotModule = FALSE; 
       MODULEENTRY32 me32       = {0}; 

       do 
       { 
           bGotModule = GetProcessModule(pe32.th32ProcessID, 
               pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32)); 

           if (bGotModule) 
           { 
               HANDLE hProcess; 

               // Get the actual priority class. 
               hProcess = OpenProcess (PROCESS_ALL_ACCESS, 
                   FALSE, pe32.th32ProcessID); 
               dwPriorityClass = GetPriorityClass (hProcess); 
               CloseHandle (hProcess); 

               // Print the process's information. 
               printf( "\nPriority Class Base\t%d\n", 
                   pe32.pcPriClassBase); 
               printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
               printf( "Thread Count\t\t%d\n", pe32.cntThreads);
               printf( "Module Name\t\t%s\n", me32.szModule);
               printf( "Full Path\t\t%s\n\n", me32.szExePath);
           } 
       } 
       while (Process32Next(hProcessSnap, &pe32)); 
       bRet = TRUE; 
   } 
   else 
       bRet = FALSE;    // could not walk the list of processes 

   // Do not forget to clean up the snapshot object. 

   CloseHandle (hProcessSnap); 
   return (bRet); 
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)