Гм. Вообще правильнее в процедуре CreateShortcuts пользовать
Win32API::GetSpecialFolderLocation с нужным параметром (CSIDL_PROGRAMS в случае
папки "Программы", или CSIDL_DESKTOP в случае "Рабочего стола").
Да, я помогу вам разобрать код и добавить дополнительные комментарии.
Код написан на языке Delphi Pascal и использует COM (Component Object Model) для создания ярлыков. Главная функция - CreateShortcut, которая принимает четыре параметра:
CmdLine: аргумент командной строки
Args: массив аргументов
WorkDir: рабочий каталог
LinkFile: имя файла для ярлыка
Функция создает объект COM типа IShellLink и присваивает его переменной MySLink. Затем она настраивает свойства ярлыка с помощью методов, таких как SetPath, SetArguments и SetWorkingDirectory. Наконец, она сохраняет ярлык в файле с помощью интерфейса IPersistFile.
Вторая процедура - CreateShortcuts, которая создает три ярлыка:
Ярлык к исполняемому файлу с именем "Autorun.exe"
Ярлык к текстовому файлу с именем "Readme.txt"
Ярлык к исполняемому файлу с именем "ivi_nt95.exe"
Для создания ярлыков процедура использует функцию CreateShortcut и предоставляет необходимые параметры.
Ваше предложение использовать GetSpecialFolderLocation - это более надежный способ получить путь каталога Program Files или Desktop. В целом, рекомендуется использовать этот API вместо использования жестких путей или переменных окружения.
Вот обновленная версия кода, которая использует GetSpecialFolderLocation:
procedureCreateShortcuts;varDirectory,ExecDir:string;MyReg:TRegIniFile;beginMyReg:=TRegIniFile.Create('Software\Microsoft\Windows\CurrentVersion\Explorer');ExecDir:=ExtractFilePath(ParamStr(0));Directory:=SHGetKnownFolderPath(CSIDL_PROGRAMS,0,nil,PChar(Result));CreateDir(Directory);MyReg.Free;CreateShortcut(ExecDir+'Autorun.exe','',ExecDir,Directory+'\Demonstration.lnk');CreateShortcut(ExecDir+'Readme.txt','',ExecDir,Directory+'\Installation notes.lnk');CreateShortcut(ExecDir+'WinSys\ivi_nt95.exe','',ExecDir,Directory+'\Install Intel Video Interactive.lnk');end;
Замените жесткие пути на вызовы SHGetKnownFolderPath, который возвращает путь каталога Program Files. Я также удалил переменную ProgramMenu, так как она не необходима в этом случае.
Надеюсь, это поможет вам лучше понять код и его работу!
Программно создать ярлык на компьютере, к примеру, в папке 'Программы' или на рабочем столе.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.