c++ - 获取浏览器进程ID,然后在C++程序中使用

标签 c++ winapi pid

我正在尝试为浏览器(Chrome 和 Firefox)创建一个简单的单词荧光笔,我希望我的程序使用进程名称(chrome.exefirefox.exe) 然后获取他们的进程 ID。

我找到了可以让我获取进程 ID 的代码,但它需要用户手动输入进程名称:

#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.exechrome.exe 来操纵这段代码,使其自动获取进程 ID?

在获得进程 ID 后,如何让我的程序明白它需要关注所述 ID?

最佳答案

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?

抱歉,我不知道“让我的程序明白它需要关注所述 ID”是什么意思。

关于c++ - 获取浏览器进程ID,然后在C++程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53459249/

相关文章:

c++ - 是否存在 "ptr1 - ptr2 > 0"与 "ptr1 > ptr2"不同的情况?

c++ - 我需要 C++ 连接器的示例代码来设置 "mysql_options"

linux - 给定一个 PPID,如何找到所有关联的 PID?

windows - Windows Server 2008 R2 中的最大进程 ID (pid)

c++ - stat() 中 UID 的错误值和 psinfo_t 中错误的 pr_pid

c++ - 生成IDE工程文件

c++ - 使用 Opencv 绘制彩色图像的直方图

delphi - 如何读取其他进程正在使用的文件?

c++ - 使用 CB_SETCURSEL 时如何发送 CBN_SELCHANGE 消息?

c++ - 在 Windows GUI 应用程序中使用 `main()` 而不是 `WinMain()` 时究竟会产生什么不良后果?