// 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;
|





