C++ 获取进程路径:使用 Windows API 枚举进程
C++ 获取进程路径:使用 Windows API 枚举进程
这是一个需要使用 Windows API 的任务,以下是一个简单的代码片段来实现此任务:
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
string GetProcessPath(string processName) {
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
string path = "";
// 获取系统中所有进程的快照
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) {
cerr << "CreateToolhelp32Snapshot failed" << endl;
return path;
}
// 在使用之前设置结构的大小
pe32.dwSize = sizeof(PROCESSENTRY32);
// 获取第一个进程的信息,如果失败则退出
if (!Process32First(hProcessSnap, &pe32)) {
cerr << "Process32First failed" << endl;
CloseHandle(hProcessSnap);
return path;
}
// 现在遍历进程快照,并依次显示每个进程的信息
do {
if (processName.compare(pe32.szExeFile) == 0) {
// 获取进程的完整路径
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);
if (hProcess != NULL) {
char buffer[MAX_PATH];
DWORD length = MAX_PATH;
if (QueryFullProcessImageName(hProcess, 0, buffer, &length)) {
path = buffer;
}
CloseHandle(hProcess);
}
break;
}
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return path;
}
int main() {
string processName = "notepad.exe";
string path = GetProcessPath(processName);
if (path.length() > 0) {
cout << "Path of " << processName << " is " << path << endl;
} else {
cout << "Failed to get path of " << processName << endl;
}
return 0;
}
此代码使用了 Windows API 中的 CreateToolhelp32Snapshot、Process32First、Process32Next 和 OpenProcess 函数来枚举所有进程,然后通过进程名称找到目标进程的进程 ID,最后使用 QueryFullProcessImageName 函数来获取该进程的完整路径。
原文地址: http://www.cveoy.top/t/topic/nnI0 著作权归作者所有。请勿转载和采集!