C语言Win32 API获取进程路径:实战指南及代码解析
使用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;
}
代码解析
-
包含头文件
windows.h: 提供Win32 API函数和数据类型。stdio.h: 提供标准输入输出函数。
-
GetProcessPath函数
- 参数说明
processName: 目标进程名称。processPath: 用于存储进程路径的缓冲区。bufferSize: 缓冲区大小。
- 函数逻辑
- 使用
CreateToolhelp32Snapshot函数获取系统所有进程的快照。 - 使用
Process32First函数获取快照中的第一个进程信息。 - 使用
Process32Next函数循环遍历快照中的所有进程。 - 比较当前进程的
szExeFile(进程名)与传入的processName。 - 如果匹配,则使用
strncpy函数将进程路径复制到processPath中,并退出循环。 - 释放快照句柄。
- 使用
- 参数说明
-
main函数
- 定义目标进程名
notepad.exe。 - 定义用于存储进程路径的缓冲区
processPath。 - 调用
GetProcessPath函数获取进程路径。 - 将获取到的路径打印到控制台。
- 定义目标进程名
总结
本代码演示了如何使用Win32 API获取指定进程路径的方法。该方法利用了 CreateToolhelp32Snapshot、Process32First、Process32Next 函数来遍历系统进程信息,并通过比较进程名来获取目标进程路径。
注意:
- 本代码适用于Windows平台。
- 需要包含
windows.h和stdio.h头文件。 - 确保传入的进程名是正确的。
- 缓冲区大小应足够大,以容纳完整的路径。
原文地址: http://www.cveoy.top/t/topic/nnJK 著作权归作者所有。请勿转载和采集!