// Hiermit
kann man Informationen aus einem Shortcut
(*.lnk) lesen. function GetLinkInfo(LNK: widestring; var lnkpfad, lnkarg, lnkdir, lnkico: string; var IDX: integer): boolean; var IUKN: IUnknown; ISL: IShellLink; IPF: IPersistFile; WFD: TWin32FindData; BUF: PChar; begin result := false; {if not SUCCEEDED(CoInitialize(nil)) then exit;} BUF := StrAlloc(MAX_PATH); IUKN := CreateComObject(CLSID_ShellLink); ISL := IUKN as IShellLink; IPF := IUKN as IPersistFile; if SUCCEEDED(IPF.Load(PWChar(LNK), STGM_READ)) then begin if SUCCEEDED(ISL.GetPath(BUF, MAX_PATH, WFD, 0)) then begin lnkpfad := BUF; if SUCCEEDED(ISL.GetIconLocation(BUF, MAX_PATH, IDX)) then begin lnkico := BUF; if lnkico = '' then lnkico := lnkpfad else if copy(lnkico, 1, 12) = '%SystemRoot%' then begin getwindowsdirectory(BUF, MAX_PATH); lnkico := BUF + copy(lnkico, 13, maxint); end; if SUCCEEDED(ISL.GetArguments(BUF, MAX_PATH)) then begin lnkarg := trim(stringreplace(BUF, '"', '', [rfreplaceall])); if SUCCEEDED(ISL.GetWorkingDirectory(BUF, MAX_PATH)) then begin lnkdir := BUF; result := true; end; end; end; end; end; StrDispose(BUF); end; // Beispielaufruf procedure TForm1.Button3Click(Sender: TObject); var Link, Datei, Parameter, Arbeitsverzeichnis, IconPfad: string; IconIdx: integer; begin Link := 'C:\Windows\Desktop\winamp3.lnk'; if getlinkinfo(Link, Datei, Parameter, Arbeitsverzeichnis, IconPfad, IconIdx) then begin Label1.Caption := 'Datei --> ' + Datei; if Parameter = '' then Label2.Caption := '(keine Parameter)' else Label2.Caption := 'Parameter --> ' + Parameter; if Arbeitsverzeichnis = '' then Label3.Caption := '(kein Arbeitsverzeichnis)' else Label3.Caption := 'Arbeitsverzeichnis --> ' + Arbeitsverzeichnis; Label4.Caption := 'Icon-Lokalisation -->' + Iconpfad + ', ' + inttostr(IconIdx); end else begin Label1.Caption := 'FEHLER'; Label2.Caption := ''; Label3.Caption := ''; Label4.Caption := ''; end; end; |