Вопрос
У меня такая проблема. Программе необходимо сделать себе ярлыки на рабочем столе, в меню пуск, но и в программах и без них, где windows update. Например и панели быстрого запуска. Как это можно реализовать?
Ответ
function CreateShortcut(const CmdLine, Args, WorkDir, LinkFile: string)
: IPersistFile; var MyObject
: IUnknown; MySLink
: IShellLink; MyPFile
: IPersistFile; WideFile
: WideString; begin MyObject
:= CreateComObject(CLSID_ShellLink); MySLink
:= MyObject as IShellLink; MyPFile
:= MyObject as IPersistFile;
with MySLink do begin SetPath(PChar(CmdLine));
SetArguments(PChar(Args));
SetWorkingDirectory(PChar(WorkDir));
end;
WideFile
:= LinkFile;
MyPFile.Save(PWChar(WideFile), False);
Result := MyPFile;
end;
procedure CreateShortcuts;
var Directory, ExecDir: String;
MyReg: TRegIniFile;
begin MyReg
:= TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer');
ExecDir := ExtractFilePath(ParamStr(0));
Directory := MyReg.ReadString('Shell Folders', 'Programs', '') + '\' + ProgramMenu;
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;
Вообще правильнее в процедуре CreateShortcuts пользовать Win32API::GetSpecialFolderLocation с нужным параметром (CSIDL_PROGRAMS в случае папки «Программы», или CSIDL_DESKTOP в случае «Рабочего стола»).
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация