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.
// Get the list of process identifiers.
DWORD aProcesses, 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.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
//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,
// Display the process name and identifier.
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.