Основа создания ярлыка является следующие: В раздел 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.
|