网上有很多办法,但都是要创建lnk快捷方式,这样会引用不需要的库,导致可执行文件很大。
所以用一个快速的办法,就是从已经建好的lnk文件里拷贝到启动组,这样只要得到两个关键路径就ok了。
没有拷贝定义变量,自己写一下就行。主要思路就是用SHGetSpecialFolderLocation 函数得到关键路径,然后来个拷贝文件就行了。中间有一段写入日志的程序可以忽略。
编译好了只有61k,未压缩的。
所以用一个快速的办法,就是从已经建好的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,未压缩的。