Tuesday, June 20, 2006

Vytvořit můžeme zástupce několika druhů

a jejich typy jsou nadefinovány hned na začátku. Pro upřesnění malý přehled v češtině:
_DESKTOP = pracovní plocha
_QUICKLAUNCH = panel rychlého spuštění (vpravo od tlačítka Start při standardním nastavení systému)
_SENDTO = odeslat (položka kontextového menu pravého tlačítka)
_STARTMENU = snad není třeba vysvětlovat :)
_OTHERFOLDER = libovolný jiný adresář, kde hodláte vytvořit zástupce
Zde tedy uvádíme zdrojový kód procedury včetně definice typů zástupce:
type ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);

procedure CreateShortcut(SourceFileName: string; Location: ShortcutType; SubDirectory : string);
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
Directory,
LinkName : string;
WFileName : WideString;
MyReg,
QuickLaunchReg : TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;

MySLink.SetPath(PChar(SourceFileName));

MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
try
LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName);
case Location of
_OTHERFOLDER : Directory := SubDirectory;
_DESKTOP : Directory := MyReg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU : Directory := MyReg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO : Directory := MyReg.ReadString('Shell Folders', 'SendTo', '');
_QUICKLAUNCH:
begin
QuickLaunchReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\GrpConv');
try
Directory := QuickLaunchReg.ReadString('MapGroups', 'Quick Launch', '');
finally
QuickLaunchReg.Free;
end;
end;
end;
if Directory <> '' then
begin
if (SubDirectory <> '') and (Location <> _OTHERFOLDER) then
WFileName := Directory + '\'+ SubDirectory +'\' + LinkName
else
WFileName := Directory + '\' + LinkName;
MyPFile.Save(PWChar(WFileName), False);
end;
finally
MyReg.Free;
end;
end;
A zde již konkrétní příklad vytvoření několika zástupců. Vytvoříme si zástupce na ploše, v menu Start, v panelu rychlého spuštění a v jednom dalším libovolném adresáři.
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateShortcut('c:\Vasprogram.exe',_STARTMENU,'Programy');
CreateShortcut('c:\Vasprogram.exe',_DESKTOP,'');
CreateShortcut('c:\Vasprogram.exe',_OTHERFOLDER,'c:\Vasadresar');
CreateShortcut('c:\Vasprogram.exe',_QUICKLAUNCH,'');
end;