Search code examples
c++winapipid

Getting a browser process ID and then using it in the program in C++


I am trying to create a simple word highlighter for browsers (Chrome and Firefox) and I would like my program to use the process name (chrome.exe or firefox.exe) and then get their process ID.

I've found code that lets me get the process ID, but it requires a user to type the process name manually:

#include "pch.h"
#include <iostream>
#include <string>
#include <windows.h>
#include <tlhelp32.h>

DWORD FindProcessId(const std::wstring& processName);

int main()
{
   std::wstring processName;

   std::wcout << "Enter the process name: ";
   std::getline(std::wcin, processName);

   DWORD processID = FindProcessId(processName);

   if (processID == 0)
      std::wcout << "Could not find " << processName.c_str() << std::endl;
   else
      std::wcout << "Process ID is " << processID << std::endl;

   system("PAUSE");
   return 0;
}

DWORD FindProcessId(const std::wstring& processName)
{
   PROCESSENTRY32 processInfo;
   processInfo.dwSize = sizeof(processInfo);

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

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

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

   CloseHandle(processesSnapshot);
   return 0;
}

Now, is there a way to manipulate this code for it to get the process ID automatically by checking whether the user is running firefox.exe or chrome.exe?

And after getting the process ID, how do I make my program understand that it needs to focus on said ID?


Solution

  • Now, is there a way to manipulate this code for it to get the process ID automatically by checking whether the user is running firefox.exe or chrome.exe?

    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <tlhelp32.h>
    
    DWORD FindProcessId(const std::wstring& processName);
    
    int main()
    {
       std::wstring fifi = L"firefox.exe";
       std::wstring gogo = L"chrome.exe";
       auto fifi_proc_id = FindProcessId(fifi);
       auto gogo_proc_id = FindProcessId(gogo);
    
       if(fifi_proc_id && gogo_proc_id) {
           // both runnin O.O what now?
       }
       else if(fifi_proc_id) {
           // firefox running ... do stuff
       }
       else if(gogo_proc_id) {
           // chrome running ... do stuff
       }
       else {
           // none of both :(
       }
    }
    

    And after getting the process ID, how do I make my program understand that it needs to focus on said ID?

    I am sorry, but I don't know what you mean by "make my program understand that it needs to focus on said ID".