除了ExtractFilePath这个函数可以获得程序路径外还有没有别的?

解决方案 »

  1.   

    GetModuleFileName函数怎么用 ?
    GetModuleFileName(null,Pchar(path),255);?????
    报错。
      

  2.   

    我一般是用 ExtractFilePath(Application.ExeName)
      

  3.   

    ExtractFilePath  不好用吗?我一直都用它
      

  4.   

    研究API .
    我到是找到一个就是太太太太长了 ...
      想简短一点 最好是只用window单元就能完成的.
      

  5.   

    这一种只对有exe的应用程序有效:ExtractFilePath(Application.ExeName)我一般用ExtractFilePath(ParamStr(0))function GetModuleFileName(Module: HMODULE; Buffer: PChar; BufLen: Integer): Integer;第一个参数是模块句柄,比如用LoadLibrary加载dll得到的句柄;后面的就是名字及分配的长度了
      

  6.   

    没有API函数能够代替ExtractFilePath,但是你可以自己写一个,其实就是反向搜索'\'并截断字符串。API函数GetModuleName()是Application.ExeName的替代品,不过用起来比较麻烦。
    procedure TForm1.FormCreate(Sender: TObject);
    var
      ModuleFileName: string;
    begin
      SetLength(ModuleFileName, MAX_PATH);
      GetModuleFileName(GetModuleHandle(nil), @ModuleFileName[1], Length(ModuleFileName));
      SetLength(ModuleFileName, StrLen(@ModuleFileName[1]));
      ShowMessage(ModuleFileName);
      ShowMessage(ExtractFilePath(ModuleFileName));
    end;
      

  7.   

    ExtractFilePath(Application.exeName);ExtractFilePath(Params(0));
      

  8.   

    JeffChung 说得对,Application.ExeName估计对DLL程序起不了作用。
      

  9.   

    对DLL用
      getModulefileName
      

  10.   

    GetModuleFileName(GetModuleHandle(nil), @ModuleFileName[1], Length(ModuleFileName));
    这里的@ModuleFileName[1],后面那个1是为什么加的啊 ?
      

  11.   


    因为GetModuleFileName函数原型的第二个参数是PChar类型,而6楼的代码定义的ModuleFileName是string类型。所以用@ModuleFileName[1]来取得字符串的首地址指针,这就跟PChar是指针一样了。当然你定义PChar然后给它分配内存,这是更一般化的做法。至于为什么是[1]而不是[0]嘛,因为string[0]保存的是字符串的长度,因而真正的有效字符从[1]开始。其实这几个函数很好用了,没必要去想什么办法在那里折腾了。还是结贴吧,呵呵
      

  12.   

    ExtractFileDir,与ExtractFilePath的区别是:返回字符串不是以“\”结尾的。
      

  13.   

    function GetCurrentModuleFile():String;
    var
      ModuleFileName: string;
      H:Cardinal;
    begin
      SetLength(ModuleFileName, MAX_PATH);
      H:=GetModuleFileName(hInstance,PChar(ModuleFileName),MAX_PATH);
      Result:=Copy(ModuleFileName,1,H);
    end;