Получение идентификатора процесса браузера, а затем его использование в программе на C ++ - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать простую подсветку слов для браузеров (Chrome и Firefox), и я хотел бы, чтобы моя программа использовала имя процесса (chrome.exe или firefox.exe), а затем получила идентификатор процесса.

Я нашел код, который позволяет мне получить идентификатор процесса, но он требует, чтобы пользователь набрал имя процесса вручную:

#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;
}

Теперь есть способ манипулировать этим кодом, чтобы он мог получитьидентификатор процесса автоматически, проверяя, работает ли пользователь firefox.exe или chrome.exe?

И после получения идентификатора процесса, как я могу заставить мою программу понять, что ей нужно сосредоточиться на указанном идентификаторе?

1 Ответ

0 голосов
/ 24 ноября 2018

Теперь, есть ли способ манипулировать этим кодом, чтобы он автоматически получал идентификатор процесса, проверяя, запускает ли пользователь firefox.exe или 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 :(
   }
}

И после получения идентификатора процесса, как мне заставить мою программу понять, что она должна фокусироваться на указанном идентификаторе?

Извините, но я не знаю, что вы подразумеваете подmsgstr "чтобы моя программа поняла, что нужно сфокусироваться на указанном идентификаторе".

...