关于getCurrentDir的问题及获取程序执行路径

      getCurrentDir获取的是当前路径,不一定就是EXE所在路径,可以用SetCurrentDir来设置的,因此如果想要获取到程序执行路径的话,不能使用该函数,而要获取程序执行路径可以用下列三种方法:

 

      1.可以使用ExtractFilePath(ParamStr(0))来进行获取。

 

原型 function paramstr(i:index):string
对于任何application paramstr(0)都默认代表的是应用程序的绝对路径。那么有paramstr(0),就肯定
有paramstr(1),paramstr(2)...了。它们的值又是什么了?我试了下取出的是空值,又不能赋值。
delphi帮助中说Returns a specified parameter from the command-line.从命令行中返回一个特别的参数。


折腾了半天才搞清楚,就是在exe文件后面可以跟参数,paramstr 获取的就是exe文件后面跟参数。
如有可执行文件project1.exe 在运行中输入   e:/project1.exe 123 456 789
那么paramstr(1)='123' paramstr(2)='456' paramstr(3)='789'
用shellexecute的话可以在parameters参数位置输入值。不同的参数值之间用空格隔开
如 shellexecute(application.Handle,'open','project4.exe','123 456', 'e:/',SW_SHOW);
所以用paramstr可以在应用程序间进行数据传输。

 

      2.可以使用ExtractFilePath(Application.ExeName)来进行获取。

     

      3.使用GetModuleFileName函数来进行获取。

 

procedure TForm1.FormCreate(Sender: TObject);
var
  buf: array[0..MAX_PATH] of Char;
  hinst: HMODULE;
begin
  {获取指定模块的句柄}
  hinst := GetModuleHandle('gdi32.dll');

  {获取模块的路径}
  GetModuleFileName(hinst, buf, Length(buf));
  ShowMessage(buf); {C:/WINDOWS/system32/GDI32.dll}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  buf: array[0..MAX_PATH] of Char;
begin
  {当 GetModuleFileName 的第一个参数为 0 或 HInstance 时, 会获取当前模块路径}
  GetModuleFileName(0, buf, Length(buf));
  ShowMessage(buf);

  GetModuleFileName(HInstance, buf, Length(buf));
  ShowMessage(buf);

  {获取当前程序路径的常用方法}
  ShowMessage(Application.ExeName);
  ShowMessage(ParamStr(0));
end;

你可能感兴趣的:(关于getCurrentDir的问题及获取程序执行路径)