Основа создания ярлыка является следующая процедура:
Uses … ShlObj, ActiveX, ComObj, StdCtrls
private
procedure CreateShotCut(SourceFile, ShortCutName,
SourceParams: String);
public
{ Public declarations }
end;
//…
implementation
procedure TForm1.CreateShotCut(SourceFile, ShortCutName, SourceParams:
String);
var
IUnk: IUnknown;
ShellLink: IShellLink;
ShellFile:
IPersistFile;
tmpShortCutName: string;
WideStr: WideString;
i:
Integer;
begin
IUnk := CreateComObject(CLSID_ShellLink);
ShellLink :=
IUnk as IShellLink;
ShellFile := IUnk as IPersistFile;
ShellLink.SetPath(PChar(SourceFile));
ShellLink.SetArguments(PChar(SourceParams));
ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFile)));
ShortCutName := ChangeFileExt(ShortCutName,'.lnk');
if
fileexists(ShortCutName) then
begin
ShortCutName :=
copy(ShortCutName,1,length(ShortCutName)-4);
i :=
1;
repeat
tmpShortCutName := ShortCutName +'(' + inttostr(i)+
').lnk';
inc(i);
until not fileexists(tmpShortCutName);
WideStr :=
tmpShortCutName;
end
else
WideStr :=
ShortCutName;
ShellFile.Save(PWChar(WideStr),False);
end;
Например, для создания ярлыка в автозагрузки надо:
procedure TForm1.Button1Click(Sender:
TObject);
var
WorkTable:String;
Find:_WIN32_FIND_DATAA;
P:PItemIDList;
C:array
[0..1000] of char;
begin
if
SHGetSpecialFolderLocation(Handle,CSIDL_PROGRAMS,p)=NOERROR
then
begin
SHGetPathFromIDList(P,C);
WorkTable:=StrPas(C)+'\Автозагрузка';
end;
if not DirectoryExists(WorkTable) then
MkDir(WorkTable);
//
создание ярлыка с помощью вышеприведенной
процедуры
CreateShotCut('Путь_к_программе\Программа.exe',
WorkTable+'\'+ExtractFileName('Путь_к_программе\Программа.exe'),
'');
end;
Или для создания ярлыка на Рабочем столе:
procedure TForm1.Button2Click(Sender:
TObject);
var
WorkTable:String;
Find:_WIN32_FIND_DATAA;
P:PItemIDList;
C:array
[0..1000] of char;
begin
if
SHGetSpecialFolderLocation(Handle,CSIDL_DESKTOP,p)=NOERROR
then
begin
SHGetPathFromIDList(P,C);
WorkTable:=StrPas(C);
end;
CreateShotCut('Путь_к_программе\Программа.exe',
WorkTable+'\'+ExtractFileName('Путь_к_программе\Программа.exe'),
'');
end;
Кстати если вы хотите сделать ярлык данной программы то вместо
'Путь_к_программе\Программа.exe' напишите Application.ExeName