GetModuleFileName()
含义:获取当前进程已加载模块文件的完整路径,该模块必须由当前进程加载。
API 说明
DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
DWORD, 如果执行成功,返回复制到lpFileName的实际字符数量;零表示失败。使用GetLastError可以打印错误信息。
参数说明:
(1)hModule Long
一个模块的句柄。可以是一个dll模块,或者是一个应用程序的实例句柄。如果该参数为NULL,该函数返回该应用程序全路径。
(2)lpFileName String
指定一个字符串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的。
(3)nSize Long
装载到缓冲区lpFileName的最大字符数量。
GetModuleFileNameEx()
含义:可以获取另一个已加载模块的文件路径。
#include
#include
using namespace std;
int main(char *argc, char argv[])
{
//1.获取exe执行的全路径
TCHAR szPath[MAX_PATH];
if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
{
cout << "GetModuleFileName failed" << GetLastError() << endl;
return FALSE;
}
//需要对 TCHAR szPath 转换成为 CString strDir
CString strDir = szPath;
//输出
wcout.imbue(locale("chs"));//输出中文
wcout << "The path is : " << strDir.GetString()<< endl;
//2.截取前部字符串,修改路径
int nPos = strDir.ReverseFind(_T('\\'));
if(nPos == -1)
{
cout << "Can not find '\\' " << endl;
return FALSE;
}
strDir = strDir.Left(nPos + 1);
strDir += _T("SuperLog.ini");
//输出
wcout << "The NEW path is : " << strDir.GetString() << endl;
return TRUE;
}
/*
如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码
GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下缓冲区就行了。
*/