Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check whether one specific process is running on windows with C++

Tags:

c++

windows

Is there any function in psapi or windows.h to get desired process' is running via only the process name (e.g : "chrome.exe") without getting all processes.

Edit:

If any one requires to get the desired process information via running through the list of all processes I can paste my code here. it works on a xp-machine and compiled with vs 2008.

I have found a solution for my question, too ! But according to the msdn the function runs already through the processes and checks the name without the extension. Shortly it searchs for "chrome" and returns the list of chrome.*

This function has a nice advantage it returns the process in a list, it might be an exe may run with may instances. Disadvantage CLR is required, it runs slower than the psapi functions and it has extra convertion requirements such as String^ to wchar or String (which I have not tested)

like image 452
icaptan Avatar asked Dec 09 '22 19:12

icaptan


1 Answers

the above answer works on win 8. here it is without the wstring stuff and stripping off the path

#include <tlhelp32.h>
DWORD FindProcessId(char* processName)
{
    // strip path

    char* p = strrchr(processName, '\\');
    if(p)
        processName = p+1;

    PROCESSENTRY32 processInfo;
    processInfo.dwSize = sizeof(processInfo);

    HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if ( processesSnapshot == INVALID_HANDLE_VALUE )
        return 0;

    Process32First(processesSnapshot, &processInfo);
    if ( !strcmp(processName, processInfo.szExeFile) )
    {
        CloseHandle(processesSnapshot);
        return processInfo.th32ProcessID;
    }

    while ( Process32Next(processesSnapshot, &processInfo) )
    {
        if ( !strcmp(processName, processInfo.szExeFile) )
        {
          CloseHandle(processesSnapshot);
          return processInfo.th32ProcessID;
        }
    }

    CloseHandle(processesSnapshot);
    return 0;
}
like image 117
steveh Avatar answered Mar 02 '23 01:03

steveh