delphi 创建自动启动的好办法

本文介绍了一种不通过创建lnk快捷方式而直接复制已存在的快捷方式到启动组的方法,以此来减少可执行文件的体积并避免引入不必要的库。文中详细展示了如何使用Delphi中的SHGetSpecialFolderLocation函数获取特殊文件夹位置,并实现文件复制。
网上有很多办法,但都是要创建lnk快捷方式,这样会引用不需要的库,导致可执行文件很大。

所以用一个快速的办法,就是从已经建好的lnk文件里拷贝到启动组,这样只要得到两个关键路径就ok了。


startup:='';
if (SHGetSpecialFolderLocation(0, CSIDL_COMMON_STARTUP, Pidl) and $80000000) = 0 then
begin
//MAX_PATH
SetLength(LinkDir, 255);
SHGetPathFromIDList(Pidl, PChar(LinkDir));
SetLength(LinkDir, StrLen(PChar(LinkDir)));
startup:=linkdir+'\客博通客服管理系统.lnk';
end;
programDir:='';
if (SHGetSpecialFolderLocation(0, CSIDL_PROGRAMS, Pidl) and $80000000) = 0 then
begin
SetLength(LinkDir, 255);
SHGetPathFromIDList(Pidl, PChar(LinkDir));
SetLength(LinkDir, StrLen(PChar(LinkDir)));
programDir:=linkdir+'\客博通\客博通客服管理系统.lnk';
end;
//exec:='copy "'+programDir+'" "'+startup+'" /y';
// err:=WinExec(PChar(exec),0);

log:=startup+' '+ programDir +' '+ BoolToStr(FileExists(programDir),true);
fLog:=FileCreate('err.log',fmOpenWrite);
cnt:=Length(log);
tmp:=PChar(log);
FileWrite(fLog,log[1] , cnt);
FileClose(fLog);

fIn:=FileOpen(programDir,fmOpenRead);
fOut:=FileCreate(startup,fmOpenWrite);
fLen:=GetFileSize(fIn,nil);
SetLength(buf, fLen);
FileRead(fIn,PChar(buf)^, fLen);
FileWrite(fOut,PChar(buf)^, fLen);
FileClose(fOut);
FileClose(fIn);


没有拷贝定义变量,自己写一下就行。主要思路就是用SHGetSpecialFolderLocation 函数得到关键路径,然后来个拷贝文件就行了。中间有一段写入日志的程序可以忽略。

编译好了只有61k,未压缩的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值