Bei lnk Verknüpfungen wirst Du wohl das Ziel der Verknüpfung (die Datei, auf die die Verknüpfung verweist) auslesen müssen und von dieser dann das Icon nehmen.
Wie das geht, findest Du alles über die Suche
[Nachtrag]
Da fällt mir grad ein, es geht auch einfacher:
Da das Icon der lnk ja nicht unbedingt das der Datei, auf die die Verknüpfung verweist, sein muss,
kann man auch den Pfad zum Icon und den IconIndex aus der Verknüpfung direkt auslesen.
Diese Funktion liest eine Verknüpfung komplett aus, was IconPath und IconIndex sind sollte wohl klar sein
Du kannst diese Funktion auf Deine Bedürfnisse anpassen und das was Du nicht brauchst weglassen.
Beachte: Die Funktion liefert False, falls die lnk-Datei nicht existiert oder keine gültige lnk-Datei ist.
Delphi-Quellcode:
function ReadLnkFile(const LnkFileName: String; { out Path, Arguments, WorkingDirectory, Description: String; out HotKey: Word; out ShowCmd: Integer; } out IconPath: String; out IconIndex: Integer): Boolean;
var
Path: String; // <--- das muss dann noch dazu
ShellLink: IShellLink;
PersistFile: IPersistFile;
FileInfo: TWin32FindData;
begin
Result:=False;
if SUCCEEDED(CoCreateInstance(CLSID_ShellLink,nil,CLSCTX_INPROC_SERVER,IShellLink,ShellLink)) then
begin
PersistFile:=ShellLink as IPersistFile;
if SUCCEEDED(PersistFile.Load(StringToOleStr(LnkFileName),STGM_READ)) then
with ShellLink do
begin
SetLength(Path,MAX_PATH+1);
if SUCCEEDED(GetPath(PChar(Path),MAX_PATH,FileInfo,SLR_ANY_MATCH)) then
begin
Path:=PChar(Path);
Result:=True;
{ SetLength(Arguments,MAX_PATH+1);
GetArguments(PChar(Arguments),MAX_PATH);
Arguments:=PChar(Arguments);
SetLength(WorkingDirectory,MAX_PATH+1);
GetWorkingDirectory(PChar(WorkingDirectory),MAX_PATH);
WorkingDirectory:=PChar(WorkingDirectory);
SetLength(Description,MAX_PATH+1);
GetDescription(PChar(Description),MAX_PATH);
Description:=PChar(Description);
GetHotkey(HotKey);
GetShowCmd(ShowCmd); }
SetLength(IconPath,MAX_PATH+1);
GetIconLocation(PChar(IconPath),MAX_PATH,IconIndex);
IconPath:=PChar(IconPath);
if IconPath='' then
IconPath:=Path;
end
{ else
Path:=''; }
end;
end;
end;
Evtl. musst Du noch diese Units einbinden, damit es funktioniert:
ShlObj, ComObj,
ActiveX
//Edit:
Den Teil den Du weglassen kannst, hab ich einfach mal auskommentiert.