看了段程序自动运行的代码,我如何获得程序的当前路径?(10分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,有几个地方不太明白,有注释。
另外这段代码是让手工选择程序的路径。但是我想让我的程序自动运行,那该如何做呢?
还用获得程序的当前路径吗?
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
AppFileName: PChar;
begin
if Edit1.Text='' then

begin
MessageBox(Handle,'应用程序名称不可以为空。','错误',MB_OK+MB_ICONERROR);
Exit;
end;
// 初始化AppFileName ,这个appfilename有啥用?
GetMem(AppFileName,256);
Edit1.GetTextBuf(AppFileName,256);
//gettextbuf是啥意思?那256呢?
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if (Reg.OpenKey('Software/Microsoft/Windows/CurrentVersion/Run',False))=True then
begin
// 在注册表中添加数值
Reg.WriteString('StartUp1',AppFileName);
//又一个appfilename
end
else
MessageBox(Handle,'打开注册表失败。','错误',MB_OK+MB_ICONERROR);
finally
Reg.CloseKey;
Reg.Free;
FreeMem(AppFileName);
end;
end;
 
哦,对了,这段代码对任何windows都管用吗?
 
问题:// 初始化AppFileName ,这个appfilename有啥用?
GetMem(AppFileName,256);
Edit1.GetTextBuf(AppFileName,256);
//gettextbuf是啥意思?那256呢?
(1)appfilename是带路径的可执行程序名,写入注册表用。
(2)gettextbuf是把edit1的内容放到AppFileName中,而AppFileName声明为Pchar,所以
要分配内存空间,大小为256,即GetMem(AppFileName,256)。
(3)你可以用 extractfilepath(application.ExeName) 来得到应用程序的当前路径。

 
真是罗嗦,这样就可以了:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text='' then

begin
MessageBox(Handle,'应用程序名称不可以为空。','错误',MB_OK+MB_ICONERROR);
Exit;
end;
with TRegistry.Create;
try
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software/Microsoft/Windows/CurrentVersion/Run',False) then
WriteString('StartUp1', Edit1.Text);
//如果是自己的程序,Edit1.Text改为ParamStr(0)就可以了
else
MessageBox(Handle,'打开注册表失败。','错误',MB_OK+MB_ICONERROR);
finally
CloseKey;
Free;
end;
end;
 
呵呵,简单明了,搞定
 

Similar threads

后退
顶部