1.Зависимости: shlObj, activeX, SysUtils, filectrl, comObj, UBPFD.ExtractFileNameEX
| Код | function CreateLink(FileName, DestDirectory: string; OverwriteExisting, AddNumberIfExists: Boolean): string;
var MyObject: IUnknown; MySLink: IShellLink; MyPFile: IPersistFile; WFileName: WideString; X: INTEGER; begin //Изначально RESULT = '' Result := ''; //Если фиайла, для которого создаётся ярлык не существует, или же не // существует директории, где должен быть создан ярлык файла, то EXIT if (FileExists(FileName) = FALSE) or (DirectoryExists(DestDirectory) = FALSE) then exit; MyObject := CreateComObject(CLSID_SHELLLINK); MyPFile := MyObject as IPersistFile; MySLink := MyObject as IShellLink; with MySLink do begin SetArguments(''); SetPath(PChar(FileName)); SetWorkingDirectory(PChar(ExtractFilePath(FileName))); end;
//Гарантирование проставление завершающего '\' в пути директории //расположения создаваемого ярлыка if DestDirectory[length(DestDirectory)] <> '\' then DestDirectory := DestDirectory + '\'; // Первичное определене будующего имени ярлыка WFileName := DestDirectory + ExtractFileNameEx(FileName, FALSE) + '.lnk'; //Если ярлык с таким именем уже существует, то if (FileExists(WFileName)) then begin // Если не надо переписывать существующий ярлык, а надо добавить // порядковый номер существования к имени создаваемого ярлыка, например // blobby1.lnk, blobby2.lnk if (OverwriteExisting = FALSE) and (AddNumberIfExists = TRUE) then begin // Определяем какой именно порядковый номер надо добавить к // имени ярлыка X := 0; repeat X := X + 1; WFileName := DestDirectory + ExtractFileNameEx(FileName, FALSE) + IntToStr(X) + '.lnk'; until FileExists(WFileName) = FALSE; // И сохраняем ярлык MyPFile.Save(PWChar(WFileName), FALSE); Result := WFileName; end; //Если надо переписывать существующий ярлык if OverwriteExisting = TRUE then begin //..., то переписываем его :) MyPFile.Save(PWChar(WFileName), FALSE); Result := WFileName; end; end else begin //В случае, если ярлыка с подобным имененм ещё нет в папке //назначения, то создаём ярлык MyPFile.Save(PWChar(WFileName), FALSE); Result := WFileName; end; end;
|
2.Зависимости: ShlObj, ActiveX, ComObj
| Код | procedure CreateShortcut(const FilePath, ShortcutPath, WorkDir, Description, Params: string); var obj: IUnknown; isl: IShellLink; ipf: IPersistFile; begin obj := CreateComObject(CLSID_ShellLink); isl := obj as IShellLink; ipf := obj as IPersistFile; with isl do begin SetPath(PChar(FilePath)); SetArguments(PChar(Params)); SetDescription(PChar(Description)); SetWorkingDirectory(PChar(WorkDir)); end; ipf.Save(PWChar(WideString(ShortcutPath)), False); end; Пример использования:
// пример создания ярлыка на рабочем столе var UserDesktop: string; R: TRegIniFile; begin R := TRegIniFile.Create(''); with R do begin RootKey := HKEY_CURRENT_USER; UserDesktop := ReadString('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', 'desktop', ''); Free; end;
CreateShortcut(Application.ExeName, UserDesktop + '\Название ярлыка.lnk', '', '', ''); end;
|
|