Einzelnen Beitrag anzeigen

MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Das schöne doofe SHGetFileInfo

  Alt 3. Mär 2020, 11:00
Ich nutze gerne SHGetFileInfo (SHGetFileInfoW) aber in Verbindung mit "SHGFI_USEFILEATTRIBUTES" läuft es meiner Meinung nach etwas Buggy.
Delphi-Quellcode:
  ZeroMemory(@Info, SizeOf(TSHFileInfoW));
  SHGetFileInfoW(PWideChar(Pfad+Datei),FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfoW), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
SHGFI_USEFILEATTRIBUTES soll ja der der Funktion sagen, nicht auf die Datei zuzugreifen. Es soll nur so wirken, dass die Datei mit (in diesem Beispiel) "FILE_ATTRIBUTE_NORMAL" vorhanden wäre. Bei LNK-Dateien greift die Funktion aber definitiv auf die Datei zu. Sie ermittelt das Ziel-Icon der LNK-Datei. Weiterhin habe ich eine Komprimierte (FILE_ATTRIBUTE_COMPRESSED) LNK-Datei, die hier mit dem obigen Code noch einen blauen Doppelpfeil bekommt. DAS DARF NICHT! Also im Grunde ein falscher Icon-Index (aus Info.iIcon). Andere LNK-Dateien haben kein blauen Doppelpfeil (trotz Komprimierung).

Gibt man für "Pfad+Datei" eine nicht existierende Datei an, sollte die Funktion eigentlich korrekt arbeiten. Man bekommt zwar hier keine LNK-Ziel-Icons (das könnte man mit anderem Code ermitteln) aber dafür ganz sicher keine blauen Pfeile. Mit einem falschen Dateinamen feuert jedoch die Funktion eine Debug-Ausgabe aus:
Code:
onecore\shell\shcore\libs\stream\oplock.cpp(281)\shcore.dll!00007FFC03E7DB5B: (caller: 00007FFC01D413A5) ReturnHr(1) tid(1880) 80070002 Das System kann die angegebene Datei nicht finden.
Die soll ja auch nicht gefunden werden. Ich will mittels "SHGFI_USEFILEATTRIBUTES" dem System ja nur mitteilen, welches Icon-Index ich von einer registrierten Dateiendung haben will. Man soll so etwas ignorieren, heißt es aber kann man ggf. die Meldung ausschalten? Also nicht alle Debug-Meldungen. Ich meine für diesen Fall dann extra? Aber was passiert ohne Debug? Wird hier dann auch versucht, auf die Datei zuzugreifen oder ist das hier nur eine Debug-Info. Sie ist jedenfalls nicht gewünscht.

Gibt es vielleicht noch eine andere schnelle Lösung, wie ich an die Icons (bzw. dem Icon Index) von einer Dateiendung komme?
  Mit Zitat antworten Zitat