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;