![]() |
Das schöne doofe SHGetFileInfo
Ich nutze gerne SHGetFileInfo (SHGetFileInfoW) aber in Verbindung mit "SHGFI_USEFILEATTRIBUTES" läuft es meiner Meinung nach etwas Buggy.
Delphi-Quellcode:
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).
ZeroMemory(@Info, SizeOf(TSHFileInfoW));
SHGetFileInfoW(PWideChar(Pfad+Datei),FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfoW), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES); 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:
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.
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.
Gibt es vielleicht noch eine andere schnelle Lösung, wie ich an die Icons (bzw. dem Icon Index) von einer Dateiendung komme? |
AW: Das schöne doofe SHGetFileInfo
Zitat:
|
AW: Das schöne doofe SHGetFileInfo
Zitat:
Scheint wohl so, dass es so implementiert ist, dass dieses Flag beim Nichtexistieren der Datei keinen Fehler "file not exists" ausgibt. |
AW: Das schöne doofe SHGetFileInfo
Zitat:
Zitat:
Wenn die Datei existiert, werden aber die echten Attribute dieser Datei verwendet. Zitat:
|
AW: Das schöne doofe SHGetFileInfo
Zitat:
|
AW: Das schöne doofe SHGetFileInfo
Aber abschalten kann man das wohl nicht, so im Code selber?
Also etwas so. {debug-file-not-found-off} SHGetFileInfo... {debug-file-not-found-on} Aber ich hab mal gesucht nach dem Shell Source-Code. Einfach mal neugierig :) Habe aber nur was von "ReactOS" gefunden ( ![]() Dort kann man ein wenig mal nachvollziehen, was so eine SHGetFIleInfo-Funktion macht. Wird evtl. in Windows selbst ähnlich sein. Gruß Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz