GetModuleFileName
函数功能
计算机应用中的一个函数,用以获取当前进程已加载模块文件的完整路径。
函数声明:
GetModuleFileNameA(
_In_opt_ HMODULE hModule,
_Out_writes_to_(nSize,((return < nSize) ? (return + 1) : nSize)) LPSTR lpFilename,
_In_ DWORD nSize
);
第一个参数
属于输入参数,一个模块的句柄。可以是一个DLL
模块,或者是一个应用程序的实例句柄。如果该参数为NULL,该函数返回该应用程序全路径(即主模块路径)
第二个参数
属于输出参数,指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule
模块就是从这个文件装载进来的。
第三个参数
属于输入参数,装载到缓冲区lpFileName
的最大字符数量。
返回值
Long,如执行成功,返回复制到lpFileName
的实际字符数量;零表示失败。使用GetLastError
可以打印错误信息。如果返回为成功,将在lpFileName
的缓冲区当中返回相应模块的路径,如果所设的nSize
过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。
返回值是用于指示是否发生错误的。
注意:
GetCurrentDirectory
只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe
)所在的目录
GetCurrentDirectory
返回当前进程的当前目录,并不一定返回你的应用程序的目录。如果你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了当前进程的当前目录了。
GetModuleFileName()
是指进程的镜像文件(.exe
)所在的目录
GetModuleFileName
函数指定当前进程模块的路径.它仅仅操作当前进程下的模块.如果想获取其他进程下的模块信息, 则需使用 GetModuleFileNameEx
函数.
GetCurrentDirectory()
适用于XP
等系统,在WinCE
上不能使用
GetModuleFileName()
适用于WinCE2.0
以后
实现代码:
获取主模块路径
TCHAR szMoudlePath[MAX_PATH];
if (!GetModuleFileName(NULL, szMoudlePath, MAX_PATH))
{
LPCSTR a = "获取主模块路径失败";
LPCSTR b = "再接再厉";
MessageBox(NULL, a, b, MB_OK);
return 0;
}
LPCSTR a = "获取主模块路径成功";
LPCSTR b = "厉害";
MessageBox(NULL, szMoudlePath, b, MB_OK);
获取DLL模块路径
TCHAR szMoudlePath[MAX_PATH];
HMODULE hKernel32;
hKernel32 = LoadLibrary("kernel32.dll");
if (!GetModuleFileName(hKernel32, szMoudlePath, MAX_PATH))
{
LPCSTR a = "获取DLL模块路径失败";
LPCSTR b = "再接再厉";
MessageBox(NULL, a, b, MB_OK);
return 0;
}
LPCSTR a = "获取DLL模块路径成功";
LPCSTR b = "厉害";
MessageBox(NULL, szMoudlePath, b, MB_OK);