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 函数来获取该进程的完整路径。

C++ 获取进程路径:使用 Windows API 枚举进程

原文地址: http://www.cveoy.top/t/topic/nnI0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录