获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
2015-05-03 17:52
816 查看
想获得进程可执行文件的路径通常有三个方法:
一: 调用GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。
二:调用GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用。
三:调用Windows Vista新增的函数QueryFullProcessImageName,由于是Vista新增的,所以兼容性不好。
下面来看看这三个函数的原型:
DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize)
hProcess是目标进程的句柄、hModule是目标模块的句柄(当此参数为NULL时函数返回的是进程可执行文件的路径)、lpFilename是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数调用失败将返回0。注:进程的句柄须有PROCESS_QUERY_INFORMATION和PROCESS_VM_READ权限。
DWORD GetProcessImageFileName(HANDLE hProcess,LPTSTR lpImageFileName,DWORD nSize)
hProcess是目标进程的句柄、lpImageFileName是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数失败将返回0。注:进程句柄需要有PROCESS_QUERY_INFORMATION的权限。
BOOL QueryFullProcessImageName(HANDLE hProcess,DWORD dwFlags,LPTSTR lpExeName,PDWORD lpdwSize)
hProcess是目标进程的句柄、dwFlags一般设为0(表示返回的路径是Win32的路径格式,如"C:/...",如将其设为PROCESS_NAME_NATIVE将返回"/Device/HarddiskVolume1/..."这样的格式路径)、lpExeName是存放路径的字符串缓冲区、lpdwSize表示缓冲区的大小。函数失败将返回FALSE。注:调用此函数的句柄须有PROCESS_QUERY_INFORMATION或这是PROCESS_QUERY_LIMITED_INFORMATION的权限,并且只能在Vista或更高版本的系统中使用。
调用GetModuleFileNameEx和GetProcessImageFileName需要包含Psapi.h头文件,并链接到Psapi.lib
#include <Psapi.h>
#pragma comment (lib,"Psapi.lib")
一: 调用GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好。
二:调用GetProcessImageFileName函数,这个函数在Windows XP及其以后的系统中都能使用。
三:调用Windows Vista新增的函数QueryFullProcessImageName,由于是Vista新增的,所以兼容性不好。
下面来看看这三个函数的原型:
DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize)
hProcess是目标进程的句柄、hModule是目标模块的句柄(当此参数为NULL时函数返回的是进程可执行文件的路径)、lpFilename是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数调用失败将返回0。注:进程的句柄须有PROCESS_QUERY_INFORMATION和PROCESS_VM_READ权限。
DWORD GetProcessImageFileName(HANDLE hProcess,LPTSTR lpImageFileName,DWORD nSize)
hProcess是目标进程的句柄、lpImageFileName是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数失败将返回0。注:进程句柄需要有PROCESS_QUERY_INFORMATION的权限。
BOOL QueryFullProcessImageName(HANDLE hProcess,DWORD dwFlags,LPTSTR lpExeName,PDWORD lpdwSize)
hProcess是目标进程的句柄、dwFlags一般设为0(表示返回的路径是Win32的路径格式,如"C:/...",如将其设为PROCESS_NAME_NATIVE将返回"/Device/HarddiskVolume1/..."这样的格式路径)、lpExeName是存放路径的字符串缓冲区、lpdwSize表示缓冲区的大小。函数失败将返回FALSE。注:调用此函数的句柄须有PROCESS_QUERY_INFORMATION或这是PROCESS_QUERY_LIMITED_INFORMATION的权限,并且只能在Vista或更高版本的系统中使用。
调用GetModuleFileNameEx和GetProcessImageFileName需要包含Psapi.h头文件,并链接到Psapi.lib
#include <Psapi.h>
#pragma comment (lib,"Psapi.lib")
相关文章推荐
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
- 获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName
- 2014-04-30工作日志:提取文件的路径及使用createprocess时,要用getmodulename获取要执行的模块的路径及调用createprocess时要记得关闭新建的进程
- PsGetProcessImageFileName - 获取进程的主模块路径
- 通过GetProcessImageFileName函数获取进程路径
- 获取可执行文件的路径GetModuleFileName
- GetModuleFileName获取当前进程已加载模块的文件的完整路径
- GetProcessImageFileName获取进程路径
- 获取文件的绝对路径, GetCurrentDirectory()和GetModuleFileName()函数的区别
- delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)
- 获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()
- 获取文件路径函数之GetModuleFileName()
- GetModuleFileName获取当前进程完整路径
- GetModuleFileName 获取当前程序可执行文件所在目录
- 利用 GetModuleFileName获取exe文件路径,,以显示bmp, jpg, png图片
- C++ 获取当前项目Debug中文件的路径(GetModuleFileName())
- MFC函数GetModuleFileName():获得应用程序目录绝对路径
- GetModuleFileName获得程序路径
- 如何获取启动文件路径 GetModuleFileName