Well I am not sure if it is 'standard' per se but I use EnumProcesses to check for running apps. e.g. something loosely like this (not compiled)
if ( EnumProcesses( processID, sizeof(processID), &needed ) )
{
processes = needed / sizeof(DWORD);
for ( int i = 0; i < processes; i++ )
{
HANDLE hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID[i] );
if ( hProcess )
{
HMODULE hMod;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, processName, sizeof(processName) );
// compare with processName, the sought after process
if ( !_tcscmp(processName, _tcsupr(processName)) )
{
result = processID[i];
break; // break at first instance
}
}
}
CloseHandle( hProcess );
}