【发布时间】:2020-09-30 21:12:45
【问题描述】:
我想获取特定子进程的进程 ID(最终将内存写入它)。这是我当前的代码:
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <string>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>
using namespace std;
int main(void)
{
DWORD ProcessID;
HWND hwnd = FindWindowA(NULL, "AJ Classic");
if (hwnd == NULL) {
cout << "Can't find Process." << endl;
Sleep(3000);
exit(-1);
}
else {
GetWindowThreadProcessId(hwnd, &ProcessID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
if (ProcessID == NULL) {
cout << "Can't optain process" << endl;
Sleep(3000);
exit(-1);
}
else {
cout << "Process ID: " << ProcessID << " | Hex: " << hex << ProcessID << dec << endl;
}
}
getchar();
}
在开始实际的内存写入之前,我想确保获得正确的进程 ID。 我当前运行代码时获得的进程 ID 不是来自我想要的 proc id 的子进程。 此屏幕截图代表我试图获取进程 ID 的进程:
我的代码获取 ID 8120,但我希望它获取 14244 进程。
如何做到这一点?
【问题讨论】:
-
您想要的进程与所有其他同名进程的区别是什么?
-
我对这个问题感到困惑,Barmar。
-
有一堆同名的进程。您要求一个具有该名称的进程,它会返回其中一个。但你想要一个不同的。你真正想要的标准是什么?是什么让 14244 比 8120 更合适?
-
当我在游戏中使用作弊引擎时,我只能编辑14244进程的值和内存。我认为这与游戏使用的模块有关,所以只有倒数第二个孩子进程让我编辑内存
-
@Silver 这不太可能是 14244 是您可以编辑的唯一进程的真正原因。此外,
PROCESS_ALL_ACCESS的权限太多了,只需要编辑内存即可。不要要求比实际需要更多的权限。在这种情况下,您只需要询问PROCESS_VM_READ、PROCESS_VM_WRITE和PROCESS_VM_OPERATION。
标签: c++ winapi process child-process