c++中通过进程名获取绝对路径
时间: 2024-01-15 22:05:10 浏览: 121
在 Windows 平台上,可以使用以下代码来获取指定进程的绝对路径:
```c++
#include <Windows.h>
#include <iostream>
#include <string>
std::string GetProcessPathByName(const std::string& processName) {
std::string processPath;
DWORD processId = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
return processPath;
}
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
if (Process32First(hSnapshot, &pe32)) {
do {
if (_stricmp(pe32.szExeFile, processName.c_str()) == 0) {
processId = pe32.th32ProcessID;
break;
}
} while (Process32Next(hSnapshot, &pe32));
}
if (processId > 0) {
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processId);
if (hProcess != NULL) {
TCHAR path[MAX_PATH];
DWORD size = MAX_PATH;
if (QueryFullProcessImageName(hProcess, 0, path, &size)) {
processPath = path;
}
CloseHandle(hProcess);
}
}
CloseHandle(hSnapshot);
return processPath;
}
int main() {
std::string processName = "notepad.exe";
std::string processPath = GetProcessPathByName(processName);
std::cout << "Process path: " << processPath << std::endl;
return 0;
}
```
上述代码使用了 Windows API 中的 `CreateToolhelp32Snapshot` 和 `OpenProcess` 函数来获取进程信息和进程句柄,使用 `QueryFullProcessImageName` 函数来获取进程的绝对路径。函数返回一个 `std::string` 类型的进程路径,如果获取失败,则返回一个空字符串。
阅读全文