Создание ярлыков на рабочем столе, старт меню, панели быстрого запуска
uses
Registry,
ActiveX,
ComObj,
ShlObj;
type
ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);
function CreateShortcut(SourceFileName: string; // the file the shortcut points to
Location: ShortcutType; // shortcut location
SubFolder, // subfolder of location
WorkingDir, // working directory property of the shortcut
Parameters,
Description: string): // description property of the shortcut string;
const
SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer';
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv';
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
Directory, LinkName: string;
WFileName: WideString;
Reg: TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
MySLink.SetPath(PChar(SourceFileName));
MySLink.SetArguments(PChar(Parameters));
MySLink.SetDescription(PChar(Description));
LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName);
// Quicklauch if Location = _QUICKLAUNCH thenbegin
Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
try
Directory := Reg.ReadString('MapGroups', 'Quick Launch', '');
finally
Reg.Free;
end;
endelse// Other locations begin
Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
trycase Location of
_OTHERFOLDER : Directory := SubFolder;
_DESKTOP : Directory := Reg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU : Directory := Reg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO : Directory := Reg.ReadString('Shell Folders', 'SendTo', '');
end;
finally
Reg.Free;
end;
end;
if Directory <> '' thenbeginif (SubFolder <> '') and (Location <> _OTHERFOLDER) then
WFileName := Directory + '\' + SubFolder + '\' + LinkName
else
WFileName := Directory + '\' + LinkName;
if WorkingDir = '' then
MySLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFileName)))
else
MySLink.SetWorkingDirectory(PChar(WorkingDir));
MyPFile.Save(PWChar(WFileName), False);
Result := WFileName;
end;
end;
function GetProgramDir: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False);
Result := reg.ReadString('Programs');
reg.CloseKey;
finally
reg.Free;
end;
end;
// Some examples: procedure TForm1.Button1Click(Sender: TObject);
const
PROGR = 'c:\YourProgram.exe';
var
resPath: string;
begin//Create a Shortcut in the Quckick launch toolbar
CreateShortcut(PROGR, _QUICKLAUNCH, '','','','Description');
//Create a Shortcut on the Desktop
CreateShortcut(PROGR, _DESKTOP, '','','','Description');
//Create a Shortcut in the Startmenu /"Programs"-Folder
resPath := CreateShortcut(PROGR, _OTHERFOLDER, GetProgramDir,'','','Description');
if resPath <> '' thenbegin
ShowMessage('Shortcut Successfully created in: ' + resPath);
end;
end;
Привет! Я перевёл текст о коде на Delphi, который создает ярлыки на рабочем столе, панели быстрого запуска и меню "Пуск" в Windows.
Типы
Тип ShortcutType определяет пять возможных мест для создания ярлыка: _DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU и _OTHERFOLDER.
Функции
Функция CreateShortcut: Создает ярлык в указанном месте с конкретными свойствами. Она принимает следующие параметры:
SourceFileName: Файл, к которому ссылается ярлык.
Location: Место, где создавать ярлык (например, рабочий стол, панель быстрого запуска, меню "Пуск").
SubFolder: Подпапка в указанном месте (опционально).
WorkingDir: Рабочая папка для ярлыка (опционально).
Parameters: Дополнительные параметры для ярлыка (опционально).
Description: Описание для ярлыка.
Функция возвращает путь к созданному файлу ярлыка.
Функция GetProgramDir: Возвращает путь к папке "Программы" в реестре Windows.
Пример использования
В примере кода создается три ярлыка:
1. Ярлык к c:\YourProgram.exe на панели быстрого запуска.
2. Ярлык к c:\YourProgram.exe на рабочем столе.
3. Ярлык к c:\YourProgram.exe в папке "Программы" меню "Пуск".
Третий пример использует функцию GetProgramDir, чтобы получить путь к папке "Программы" и передать его как параметр функции CreateShortcut.
Замечания
Код использует COM-объекты для взаимодействия с функциональностью оболочки Windows.
Компонент TRegIniFile используется для чтения и записи настроек реестра.
Интерфейс IPersistFile используется для сохранения файла ярлыка.
Интерфейс IShellLink используется для установки свойств для ярлыка.
В целом, этот код предоставляет удобный способ создавать ярлыки в различных местах на рабочем столе Windows.
Создание ярлыков на рабочем столе, старт меню и панели быстрого запуска с помощью динамического связывания COM-объектов и регистрации в реестре.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.