GetModuleFileName() 原型如下:
[C++] 纯文本查看 复制代码 DWORD WINAPI GetModuleFileName(
__in_opt HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize
);
该函数获取指定模块的全路径,指定模块必须已经加载进当前进程中。
第 1 个参数 hModule 是已加载模块的句柄。如果该参数为 NULL,那么函数获取当前进程的可执行文件的路径。
第 2 个参数 lpFilename 是一个用来所获取路径的缓冲区。
第 3 个参数 nSize 是第 2 个参数表示的缓冲区的大小,一般可设为 MAX_PATH 即可。
测试代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
TCHAR szModulePath[MAX_PATH];
HMODULE hKernel32;
if (!GetModuleFileName(NULL, szModulePath, MAX_PATH)) {
_tprintf (TEXT("获取模块路径错误!\n"));
return (-1);
}
_tprintf (TEXT("本模块路径为:%s\n"), szModulePath);
hKernel32 = LoadLibrary(TEXT("kernel32.dll"));
if (!GetModuleFileName(hKernel32, szModulePath, MAX_PATH)) {
_tprintf (TEXT("获取模块路径错误!\n"));
return (-1);
}
_tprintf (TEXT("Kernel32 模块路径为:%s\n"), szModulePath);
return 0;
}
运行输出:D:\WinAPI\ModulePath\Debug>ModulePath.exe
本模块路径为:D:\WinAPI\ModulePath\Debug\ModulePath.exe
Kernel32 模块路径为:C:\Windows\syswow64\kernel32.dll |