實例:

#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 buffer
  LPTSTR lpBuffer        // pointer to buffer for current directory
 
); 
 這個最快!
或者用
DWORD GetModuleFileName(


裝載一個程序實例的句柄。如果該參數為NULL,該函數返回該當前應用程序全路徑。(可用於返回指定的DLL模塊地址)

指定一個字串緩衝區,用於容納文件的以NULL字符結尾的路徑名,是一個輸出參數

裝載到緩衝區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 則表示獲取當前應用程序的路徑第二個參數就是保存獲取路徑的字符串空間第三個參數就是數組的大小