Ich verwende folgenden Code um das Icon von Dateien zu ermitteln. Wenn ich den kompletten Pfad zur Anwendung kenne ist es ja auch kein Problem, auch wenn ich bspw. nur '.zip' angebe wird mir das Icon korrekt angezeigt.
Will ich jetzt aber das Icon einer Datei (z.B. taskmgr.exe) ermitteln, schlägt das fehl und ich bekomme nur das Standardicon für Anwendungen angezeigt. Meine Frage ist nun wie ich SHGetFileInfo dazu überreden kann auch die Path-Umgebungsvariable zu durchsuchen/verwenden?
Delphi-Quellcode:
function GetIconFromFile(const szFilename: string;
fSmall: boolean = false): TIcon;
const
dwIconFlags : array[boolean]of dword =
(SHGFI_LARGEICON,SHGFI_SMALLICON);
var
fi : TSHFileInfo;
begin
Result := nil;
ZeroMemory(@fi,sizeof(fi));
SHGetFileInfo(pchar(szFilename),FILE_ATTRIBUTE_NORMAL, fi, sizeof(fi),
SHGFI_ICON or SHGFI_USEFILEATTRIBUTES or dwIconFlags[fSmall]);
if(fi.hIcon <> 0) then
begin
Result := TIcon.Create;
if(Result <> nil) then
Result.Handle := fi.hIcon;
end;
end;