实例:
#include < windows.h >
#include < string.h >
HINSTANCE hInst;
char szBuf[256];
char *p;
//拿到全部路径
GetModuleFileName(hInst,szBuf,sizeof(szBuf));
//分离路径和文件名。
p = szBuf;
while(strchr(p,'\\')) {
p = strchr(p,'\\');
p++;
}
*p = '\0';
//路径在szBuf
===========================================================
获取当前目录的函数:
DWORD GetCurrentDirectory(
DWORD nBufferLength, // size, in characters, of directory bufferLPTSTR lpBuffer // pointer to buffer for current directory
); 这个最快!
或者用
DWORD GetModuleFileName(
HMODULE hModule, // 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。(可用于返回指定的DLL模块地址) LPTSTR lpFilename, //指定一个字串缓冲区,用于容纳文件的以NULL字符结尾的路径名,是一个输出参数 DWORD nSize //装载到缓冲区lpFileName的最大值 ); //如果函数失败,返回值将为0,利用GetLastError可获得异常代码。VC实例
#include <windows.h>
#include <stdio.h> BOOL CreateSampleService() { TCHAR szPath[MAX_PATH]; if( !GetModuleFileName( NULL, szPath, MAX_PATH ) ) { printf("GetModuleFileName failed (%d)\n", GetLastError()); return FALSE; } return TRUE; } /* 如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码 GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下 缓冲区 就行了。 */==========================================================
DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize) hProcess是目标进程的句柄、hModule是目标模块的句柄(当此参数为NULL时函数返回的是进程可执行文件的路径)、lpFilename是存放路径的字符串缓冲区、nSize表示缓冲区的大小。 hModule是目标模块的句柄 模块句柄什么呀 如果不为null会返回什么呀 ?
一个进程可能有多个模块在内存中运行,像exe,dll什么的。其中有一个是主模块,当hModule参数为NULL是返回的主模块的路径,不为NULL,返回指定模块文件的路径。==========================================================
别忘啦,控制台下的话参数 argv[0],哈哈cout<<argv[0];
而 GetModuleFileName 是win32的API比如你建立一个控制台程序 可以这样使用:char BufferFileName[MAX_PATH];//MAX_PATH是系统的宏定义memset(BufferFileName,0,MAX_PATH);if( GetModuleFileName(NULL,BufferFileName,MAX_PATH) ){ 输出BufferFileName即可。}第一个参数如果为NULL 则表示获取当前应用程序的路径第二个参数就是保存获取路径的字符串空间第三个参数就是数组的大小