Home » Tipps & Tricks » Dateien/Verzeichnisse » Verknüpfungen » Verknüpfung (*.lnk) zu einer Datei erstellen

Verknüpfung (*.lnk) zu einer Datei erstellen

Mithilfe folgender Funktion kann man eine Verknüpfung (*.lnk-Datei) zu einer Datei erstellen. Die Funktion gibt bei Erfolg True zurück und erwartet drei Parameter: Den kompletten Dateinamen der Datei zu der verknüpft werden soll, den kompletten Dateinamen zu der zu erstellenen LNK-Datei und ein Text, der Verknüpfung näher beschreibt. Dieser Beschreibungstext ist allerdings nicht zwingend erforderlich.

Zudem müssen die Units ShlObj, ActiveX und ComObj per uses-Klausel eingebunden werden.

function CreateLink(const AFilename, ALNKFilename, ADescription: string) : Boolean;
var
  psl : IShellLink;
  ppf : IPersistFile;
  wsz : PWideChar;
begin
  result:=false;
  if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil,
  CLSCTX_inPROC_SERVER, IID_IShellLinkA, psl)) then
  begin
    psl.SetPath(PChar(AFilename));
    psl.SetDescription(PChar(ADescription));
    psl.SetWorkingDirectory(PChar(ExtractFilePath(AFilename)) ;);
    if SUCCEEDED(psl.QueryInterface(IPersistFile, ppf)) then
    begin
      GetMem(wsz, MAX_PATH*2);
      try
        MultiByteToWideChar(CP_ACP, 0, PChar(ALNKFilename), -1, wsz, MAX_PATH);
        ppf.Save(wsz, true);
        result:=true;
      finally
        FreeMem(wsz, MAX_PATH*2);
      end;
    end;
  end;
end;

Weitere Einstellungsmöglichkeiten für die Verknüpfungen finden Sie in der PSDK unter dem Stichwort „IShellLink“. In der obigen Funktion verwenden wir die Routinen SetPath (Verzeichnis der zu verknüpfenden Datei), SetDescription (Beschreibungstext) und SetWorkingDirectory (Arbeitsverzeichnis).

Aufgerufen werden kann die Funktion beispielsweise so:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CreateLink('C:\WINDOWS\notepad.exe',       // Ziel
                'c:\test.lnk',                  // Speicherort der verknüpfung
                'Verknüpfung zu Notepad') then  // Verknüpfungs Beschreibung
    MessageDlg('Link erzeugt', mtInformation, [mbOk], 0);
end;