GetModuleFileNameEx和EnumProcessModules如何查找某个进程,举个例子
时间: 2023-06-11 13:10:39 浏览: 41
`GetModuleFileNameEx` 和 `EnumProcessModules` 是用于获取某个进程的模块信息的函数,其中 `GetModuleFileNameEx` 可以获取指定进程中指定模块的路径,而 `EnumProcessModules` 可以枚举指定进程中的所有模块。
下面是一个示例,展示如何使用这两个函数获取一个进程的模块路径:
```c++
#include <Windows.h>
#include <Psapi.h>
#include <iostream>
int main()
{
DWORD pid = 1234; // 假设要获取的进程的 PID 是 1234
// 打开进程句柄
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
if (hProcess == NULL)
{
std::cout << "打开进程失败" << std::endl;
return 1;
}
// 获取进程模块句柄
HMODULE hModule;
DWORD cbNeeded;
if (!EnumProcessModules(hProcess, &hModule, sizeof(hModule), &cbNeeded))
{
std::cout << "获取模块句柄失败" << std::endl;
CloseHandle(hProcess);
return 1;
}
// 获取模块路径
TCHAR szModName[MAX_PATH];
if (!GetModuleFileNameEx(hProcess, hModule, szModName, MAX_PATH))
{
std::cout << "获取模块路径失败" << std::endl;
CloseHandle(hProcess);
return 1;
}
std::cout << "进程 " << pid << " 的模块路径是:" << szModName << std::endl;
CloseHandle(hProcess);
return 0;
}
```
其中,`pid` 是要获取的进程的 PID,可以通过其他方式获取。在本示例中,我们假设要获取的进程的 PID 是 1234。
首先,我们打开进程句柄,然后使用 `EnumProcessModules` 函数获取进程模块句柄。由于我们只需要获取一个模块的路径,因此这里只枚举了一个模块。
接着,我们使用 `GetModuleFileNameEx` 函数获取模块的路径,将其存储在 `szModName` 变量中,并输出到控制台。
最后,我们关闭进程句柄,结束程序。