Programowanie w języku Delphi » FAQ

Jak wyciągnąć ścieżkę do pliku ze skrótu (czyli z pliku *.lnk)

  • 2013-04-13 12:34
  • 0 komentarzy
  • 1461 odsłon
  • Oceń ten tekst jako pierwszy
Wymagane moduły (uses): ComObj, ShlObj oraz ActiveX

Funkcja prezentuje się tak:
function ExtractShortcutFile(const Shortcut: String): String;
var
  I_UNK: IUnknown;
  I_SL: IShellLink;
  I_PerF: IPersistFile;
 
  W32FD: TWin32FindData;
  buffer: array[0..MAX_PATH] of Char;
begin
  I_UNK := CreateComObject(CLSID_ShellLink);
  I_SL := I_UNK as IShellLink;
  I_PerF := I_UNK as IPersistFile;
 
  I_PerF.Load(PWideChar(Shortcut), STGM_READ);
 
  I_SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI);
  I_SL.GetPath(buffer, MAX_PATH, W32FD, SLGP_RAWPATH);
 
  Result := buffer;
  I_UNK._Release;
end;

Przykładowe wywołanie kodu:
ExtractShortcutFile('C:\Users\xyz\Desktop\Program.lnk');

Może zwrócić np.C:\Program Files\Prog\Program.exe.


Przydatne linki:
http://msdn.microsoft.com/en-u[...]top/bb774944%28v=vs.85%29.aspx