V dnešním pokračování seriálu se budeme zabývat zástupci. Ukážeme si, jaké typy známe a jak pracovat s jejich soubory.
Co je to "zástupce" snad netřeba příliš vysvětlovat. S příchodem Windows 95 jsme je začali všichni používat zcela běžně a každý asi ví, že zástupce, který je rozeznat od skutečného fyzického souboru na disku (resp. aplikace či dokumentu, protože zástupce sám o sobě je pochopitelně také soubor) malou šipkou na ikoně, slouží jako odkaz na jiný zdroj. Kliknutím na tento odkaz se tedy spustí skutečná aplikace, dokument a podobě a případným smazáním zástupce nebude odkazovaný cílový objekt nijak ovlivněn. Tohle tedy každý ví a běžně používá.
Dalo by se říci, že existují dva druhy zástupců a to jak svým zaměřením, tak i formátem souboru, ve kterém jsou uloženy. Prvním typem je zástupce (či zde spíše obvyklejší pojmenování "odkaz") na nějaký externí zdroj, zpravidla webovou stránku. V systému se mu říká "Zástupce internetové adresy", má většinou ikonku webového prohlížeče a je uložen na disku v souboru s koncovkou URL. Takový soubor je vlastně svým způsobem obyčejný INI soubor, protože je to textový soubor, rozdělený do příslušných sekcí a můžete si jej snadno prohlédnout a editovat třeba v Poznámkovém bloku. Zkusit si to můžete hned teď, protože pokud používáte Internet Explorer a máte uloženy nějaké Oblíbené položky, jsou tyto odkazy uloženy právě v podobě jednotlivých URL souborů. Práce s těmito soubory je pak snadná, užívají se stejné postupy jako u INI souborů a zabývat se jimi nebudeme.
Zajímavější z programátorského hlediska je druhý typ zástupce, který odkazuje na nějaký lokální soubor či dokument. Má ikonu příslušné aplikace, která je pochopitelně opět opatřenou šipkou, pokud si ručně v registrech či pomocí nějakého "tweakovacího" programu šipky neodstraníte. Takový zástupce je pak uložen v souboru LNK, což je binární soubor, se kterým si v Poznámkovém bloku už příliš legrace neužijete. Jak z toho souboru dostat to nejcennější, tedy cíl, na který zástupce odkazuje, to bude právě cílem dnešního příkladu.
Zaklínadlem našeho postupu bude API rozhraní IShellLink (více informací zde na MSDN) a funkce GetPath, jejíž název hovoří jasně, k čemu slouží. Funkce pro získání cesty ke zdroji, na který zástupce odkazuje, pak bude vypadat takto:
function GetTarget(const LinkFileName:String):String;
var
psl: IShellLink;
ppf: IPersistFile;
WidePath: array[0..260] of WideChar;
Info: array[0..MAX_PATH] of Char;
wfs: TWin32FindData;
begin
CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, psl);
if psl.QueryInterface(IPersistFile, ppf) = 0 then
begin
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, PChar(LinkFileName), -1, @WidePath, MAX_PATH);
ppf.Load(WidePath, STGM_READ);
psl.GetPath(@info, MAX_PATH, wfs, SLGP_UNCPRIORITY);
Result := info;
end
else
Result := ``;
end;
Parametrem je soubor LNK a výstupem funkce je pak cesta ke zdroji. Aby funkce fungovala, budeme potřebovat ještě do uses přidat knihovny ShlObj a ActiveX. A to je vše, funkce je hotová. Chcete-li experimentovat, výše uvedený odkaz je ideální zdroj informací.