Получаем путь к файлу, который запускается ярлыком.
1 2 3 4 5 6 7 8 9 10 11 12 |
Uses System.Win.ComObj, Winapi.ShlObj, ActiveX; ... var linkFileName, linkTarget: WideString; begin linkFileName:= GetEnvironmentVariable('appdata') + '\Microsoft\Windows\Start Menu\Programs\Internet Explorer.lnk'; linkTarget:= getFilePathFromLink(linkFileName); ShowMessage(linkTarget); end; |
Параметры
linkFileName - путь к ярлыку
Результат
Путь к файлу который запускается ярлыком или пустая строка в случае неудачи, или если ярлык не существует.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function getFilePathFromLink(linkFileName: string ): string; var MyObject: IUnknown; MySLink: IShellLink; MyPFile: IPersistFile; FileInfo: TWin32FINDDATA; WidePath: array[0..MAX_PATH] of WideChar; Buff: array[0..MAX_PATH] of Char; begin Result := ''; if (FileExists(LinkFileName) = false) then Exit; MyObject := CreateComObject( CLSID_ShellLink ); MyPFile := MyObject as IPersistFile; MySLink := MyObject as IShellLink; StringToWideChar(LinkFileName, WidePath, SizeOf(WidePath)); MyPFile.Load(WidePath, STGM_READ); MySLink.GetPath(Buff, MAX_PATH, FileInfo, SLGP_UNCPRIORITY); Result := buff; end; |