Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   SHGetFileInfo und SHGFI_ICONLOCATION? (https://www.delphipraxis.net/158973-shgetfileinfo-und-shgfi_iconlocation.html)

demic 9. Mär 2011 21:06

SHGetFileInfo und SHGFI_ICONLOCATION?
 
Hallo,

ich benutze SHGetFileInfo um an die Symbole zu kommen. Das klappt ganz gut. Für Optimierungen meiner Anwendung benötige ich nun den Dateinamen und das Verzeichnis, in der das entsprechende Symbol abgespeichert ist. Ich habe mit SHGFI_ICONLOCATION ein wenig expermimentiert, jedoch klappt es nicht 100%. Hat sich damit schon mal jemand beschäftigt? Laut Internet haben auch andere damit Schwierigkeiten.

Gruß
Michael

daywalker9 9. Mär 2011 21:28

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Zeig doch mal die passende Codestelle

demic 9. Mär 2011 21:57

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Nun, ich kürze mal etwas ab.

SHGetFileInfo('C:\Windows'), 0, shInfo, SizeOf(shInfo), SHGFI_ICONLOCATION);
In shInfo.szDisplayName steht bei den obigen SHGetFIleInfo-Angaben der Wert "C:\Windows\System32\imageres.dll". In der shInfo.iInfo der Wert "-3".

SHGetFileInfo('C:\autoexec.bat'), 0, shInfo, SizeOf(shInfo), SHGFI_ICONLOCATION);
In shInfo.szDisplayName steht bei den obigen SHGetFIleInfo-Angaben kein Wert. In der shInfo.iInfo der Wert "7".

Ein Wert für "shInfo.szDisplayName" scheint nur bei Verzeichnissen zu funktionieren.

Wenn man jetzt von speziellen Symbolen für Verzeichnisse (z.B. "Dokumente und Einstellungen") absieht, benutzt (laut der Registry) Windows 7 die Datei "C:\Windows\System32\shell32.dll" (Index 3) für ein Ordner-Symbol und nicht wie "szDisplayName" meint, die Datei "C:\Windows\System32\imageres.dll".

Andere Angaben (z.b. "SHGFI_ICONLOCATION or SHGFI_USEFILEATTRIBUTES") gehen auch nicht. Ich hab viel ausprobiert.

Gruß
Michael

daywalker9 9. Mär 2011 22:13

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Was genau willst Du denn mit den Icos machen?

//edit:
Schon mal so probiert?
Delphi-Quellcode:
SHGetFileInfo('C:\AutoExec.bat', FILE_ATTRIBUTE_NORMAL, shInfo, SizeOf(shInfo), SHGFI_ICONLOCATION or SHGFI_TYPENAME or SHGFI_DISPLAYNAME);

Luckie 9. Mär 2011 22:57

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Hast du die Struktur auch initialisiert?

demic 10. Mär 2011 19:12

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
daywalker9::
Ja, alles schon probiert.
Die Icon-Location sollte für eine Optimierung sein. Habe mein kleines Opti-Problem jetzt zum Glück mit der System Image Liste verbunden. Musste einiges umschreiben. Also das Hauptproblem ist beseitigt. Dennoch interessiert mich "SHGFI_ICONLOCATION". Ich könnte es für andere Zwecke (aber eher unwichtige) gebrauchen.

Luckie:: Was meinst du mit Struktur initialisieren? Meinst du "var shInfo : TSHFileInfo;" ? Das ist natürlich drin, da sonst natürlich überhaupt nichts geht.

Zu dem Icon-Thema habe ich noch eine andere Frage. SHGetFileInfo liefert (wenn gewünscht) spezielle Symbole für manche Ordner, für einzele ".exe", ".msc", ".lnk" und ".ico" Dateien. Bin gerade am überlegen, welche Dateiendungen noch berücksichtig werden. Die Bilder-Vorschau (auch als kleine Icons) im Explorer für ".jpg", ".bmp" etc. scheint wohl ein eigenes Feature zu sein. Kennt jemand noch andere Dateiendungen, die SHGetFileInfo berücksichtigt?

Gruß
Michael

Luckie 10. Mär 2011 19:21

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Also das ist mir klar, dass du die Variable auch deklariert hast. Aber hast du die Felder der Struktur auch alle erstmal mit null (ZeroMemory) initialisiert, damit da kein Schrott drin steht beim Aufruf der Funktion?

demic 10. Mär 2011 19:51

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Habe Zero... gerade nicht drin aber das hatte ich auch schon probiert.
Ich schau aber noch mal.

Michael

demic 14. Mär 2011 22:38

AW: SHGetFileInfo und SHGFI_ICONLOCATION?
 
Das mit SHGFI_ICONLOCATION hab ich noch nicht ganz ausgetestet. Jedenfalls habe ich für meine andere SHGetFileInfo Routinen das "ZeroMemory" mal hinzugefügt. Danke für die Info. Das mit SHGFI_ICONLOCATION muss ich halt noch durchtesten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz