如果你是要获得你自己的应用程序的启动路径,在程序启动后调用GetCurrentDirectory就能
获得应用程序的启动路径。如果你是要取得别的应用程序的启动路径,首先取得它的进程号,
然后在进程的信息中就包含了进程的启动路径。

解决方案 »

  1.   

    yb的GetCurrentDirectory不一定对,如果块届方式的工作路径和应用程序路径不一致市会Crash
      

  2.   

    GetCurrentDirectory
    The GetCurrentDirectory function retrieves the current directory for the current process. 
      

  3.   

    进程的当前目录并不是其启动文件所在的目录,这一点从创建快捷方式中便可看出来(因为你可任意设定进程的当前工作目录),要想得到进程启动文件所在的目录,应该用GetModuleFileName,然后去掉文件名部分即可。去掉文件名用几种方法:
    1. 逆序查找'\'或'/'字符
    2. 用GetFileTitle取得文件名,然后逆序查找文件名在全路径名中的位置
      

  4.   

    以上说的都不好!这是我原来跟踪 GetCommandLine()后编写的函数
    先用 GetWindowThreadProcessId() 得到 程序窗口Id 号,再调用本函数就可返回了
    char *GetProcPath(DWORD ProcId)
    {
    static char ProcPath[MAX_PATH],*pstr,id[2];
    HANDLE hProc;
    DWORD dw;
    unsigned int offset;
    pstr=ProcPath+1;
    memset(ProcPath,0,MAX_PATH);
    ProcPath[0]=' ';
    hProc=OpenProcess(PROCESS_VM_READ,0,ProcId);
    if(hProc==NULL)return NULL;
    ReadProcessMemory(hProc,(LPCVOID)0xbffcade4,&offset,4,&dw);
    ReadProcessMemory(hProc,(LPCVOID)offset,&offset,4,&dw);
    ReadProcessMemory(hProc,(LPCVOID)(offset+0x40),&offset,4,&dw);
    ReadProcessMemory(hProc,(LPCVOID)(offset+8),&offset,4,&dw);
    ReadProcessMemory(hProc,(LPCVOID)offset,pstr,MAX_PATH,&dw);
    if(pstr[0]==0)
     ReadProcessMemory(hProc,(LPCVOID)0x620298,pstr,MAX_PATH,&dw);
     
    CloseHandle(hProc);
    if(*pstr==0)return NULL;
    if(*pstr!='\"')pstr--;
    return pstr;
    }