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

本文介绍了三种获取程序执行路径的方法:使用ExtractFilePath(ParamStr(0))、ExtractFilePath(Application.ExeName)及GetModuleFileName函数。同时解释了ParamStr系列函数的作用及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值