How to list all running process in the system

10 02 2009




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.




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.




#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 ) )
   // 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.  
      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 );
   //close the process handle
   CloseHandle( hProcess );

Code Snippet Courtesy : MSDN 2008




Please include Psapi.lib to library modules.



8 responses

6 07 2010

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

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

28 02 2012

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

28 02 2012

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

29 02 2012
Sanoop S P

Ok… Thank you

20 11 2012

It doesnt show the names correctly

Leave a Reply

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

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

Google photo

You are commenting using your Google 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 )

Connecting to %s

%d bloggers like this: