使用Win32 API获取进程路径的C语言代码

本文将介绍如何使用Win32 API获取指定进程的路径,并提供C语言代码示例。

代码示例

#include <windows.h>
#include <stdio.h>

void GetProcessPath(char* processName, char* processPath, int bufferSize)
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnapshot == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot failed!\n");
        return;
    }

    PROCESSENTRY32 processEntry;
    processEntry.dwSize = sizeof(PROCESSENTRY32);
    if (!Process32First(hSnapshot, &processEntry))
    {
        printf("Process32First failed!\n");
        CloseHandle(hSnapshot);
        return;
    }

    while (Process32Next(hSnapshot, &processEntry))
    {
        if (_stricmp(processEntry.szExeFile, processName) == 0)
        {
            strncpy(processPath, processEntry.szExeFile, bufferSize);
            break;
        }
    }

    CloseHandle(hSnapshot);
}

int main()
{
    char processName[] = "notepad.exe";
    char processPath[MAX_PATH];

    GetProcessPath(processName, processPath, MAX_PATH);

    printf("Process path is: %s\n", processPath);

    return 0;
}

代码解析

  1. 包含头文件

    • windows.h: 提供Win32 API函数和数据类型。
    • stdio.h: 提供标准输入输出函数。
  2. GetProcessPath函数

    • 参数说明
      • processName: 目标进程名称。
      • processPath: 用于存储进程路径的缓冲区。
      • bufferSize: 缓冲区大小。
    • 函数逻辑
      • 使用 CreateToolhelp32Snapshot 函数获取系统所有进程的快照。
      • 使用 Process32First 函数获取快照中的第一个进程信息。
      • 使用 Process32Next 函数循环遍历快照中的所有进程。
      • 比较当前进程的 szExeFile(进程名)与传入的 processName
      • 如果匹配,则使用 strncpy 函数将进程路径复制到 processPath 中,并退出循环。
      • 释放快照句柄。
  3. main函数

    • 定义目标进程名 notepad.exe
    • 定义用于存储进程路径的缓冲区 processPath
    • 调用 GetProcessPath 函数获取进程路径。
    • 将获取到的路径打印到控制台。

总结

本代码演示了如何使用Win32 API获取指定进程路径的方法。该方法利用了 CreateToolhelp32SnapshotProcess32FirstProcess32Next 函数来遍历系统进程信息,并通过比较进程名来获取目标进程路径。

注意:

  • 本代码适用于Windows平台。
  • 需要包含 windows.hstdio.h 头文件。
  • 确保传入的进程名是正确的。
  • 缓冲区大小应足够大,以容纳完整的路径。
C语言Win32 API获取进程路径:实战指南及代码解析

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

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