How to list all running process in the system

10 02 2009

description3

 

 

We are familiar with Task Manager, which is showing all the running process in our system. Does anybody know how to list these in our C++ application.

howcanidoit4

 

 

There is a wide area in WIndows APIs for that, known as Process Status Application Programming Interface (PSAPI). This library helps us to get the information about processes and device drivers.

Our particular task could be achieved by using the APIs EnumProcesses, OpenProcess, EnumProcessModules and GetModuleBaseName.

mycodesnippet3

 

 

#include "psapi.h"
void main()
{
   // Get the list of process identifiers.  
   DWORD aProcesses[1024], cbNeeded, cProcesses;
   unsigned int i;
  
   //This returns a list of handles to processes running on the system as an array.
   if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
      return;
  
   // Calculate how many process identifiers were returned.  
   cProcesses = cbNeeded / sizeof(DWORD);
  
   // Display the name and process identifier for each process.  
   for ( i = 0; i < cProcesses; i++ )
      if( aProcesses[i] != 0 )
         DisplayProcessNameAndID( aProcesses[i] );  
}
void DisplayProcessNameAndID( DWORD processID )
{
   TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
  
   // Get a handle to the process.  
   HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
      PROCESS_VM_READ,
      FALSE, processID );
  
   // Get the process name.  
   if (NULL != hProcess )
   {
      HMODULE hMod;
      DWORD cbNeeded;
     
      //Given a handle to a process, this returns all the modules running within the process.
      //The first module is the executable running the process,
      //and subsequent handles describe DLLs loaded into the process.
      if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
      {
         //This function returns the short name for a module,
         //typically the file name portion of the EXE or DLL
         GetModuleBaseName( hProcess, hMod, szProcessName,
            sizeof(szProcessName)/sizeof(TCHAR) );
      }
   }
  
   // Display the process name and identifier.
   CString str;
   str.Format("Text:%s, PID : %u", szProcessName, processID );
   AfxMessageBox(str);
  
   //close the process handle
   CloseHandle( hProcess );
}

Code Snippet Courtesy : MSDN 2008

mynote3

 

 

Please include Psapi.lib to library modules.

Advertisements

Actions

Information

8 responses

6 07 2010
Guilherme

What program did you use to compile this code?

8 07 2010
Sanoop S P

You can compile it in VS2008

11 09 2011
Chris Tran

why isn’t it working in VS 2010? I have the psapi.h file. Ther are syntax errors. By the way, how can you include the psapi.lib?

28 09 2011
ITtuition.com

Good tut – useful, would be good to compare against unix version.

28 02 2012
niekto

But this doesnt list all of running process in system maybe half of them!

28 02 2012
niekto

sorry my mistake. it show all running process on system.

29 02 2012
Sanoop S P

Ok… Thank you

20 11 2012
erg

It doesnt show the names correctly

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: