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/)
-   -   System Icon zu Dateityp ermitteln (https://www.delphipraxis.net/195173-system-icon-zu-dateityp-ermitteln.html)

dataspider 8. Feb 2018 08:57

System Icon zu Dateityp ermitteln
 
Hallo

Zur Anzeige von Dateien (Icon) im ListView benutze ich bereits TSHFileInfo.
Das funktioniert, sofern die Datei auf Platte gespeichert ist.
Jetzt habe ich aber nur den Dateinamen, noch nicht die Datei.

Ich hätte also gern zur Erweiterung das Icon.

Ich möchte auch nicht die Datei auf Platte speichern.
Es geht um einen Import von .eml - Dateien.
Ich hole aus der eml erst mal nur die nötigsten Informationen zur Anzeige in einer Grid.
Dafür jetzt sämtliche Anlagen noch irgendwo "zwischen zu speichern" find ich blöd...
Outlook kann das z.B.

Gibt es da eine Lösung?


Frank

Ghostwalker 8. Feb 2018 09:02

AW: System Icon zu Dateityp ermitteln
 
In der Registry solltest du anhand der Dateiendung rausfinden können, welches Icon hier vom System benutzt wird.

Redeemer 8. Feb 2018 09:04

AW: System Icon zu Dateityp ermitteln
 
Die Informationen zu den Icons stehen in HKCR, da kann man sie auslesen. Dort steht dann so etwas wie:
.docx -> "" = Word.Document.12
Word.Document.12\DefaultIcon -> "" = C:\Windows\Installer\{90140000-003D-0000-0000-0000000FF1CE}\wordicon.exe,13
Also muss man das 14. Icon aus der Datei C:\Windows\Installer\{90140000-003D-0000-0000-0000000FF1CE}\wordicon.exe laden.

uligerhardt 8. Feb 2018 09:18

AW: System Icon zu Dateityp ermitteln
 
Du meinst mit SHGetFileInfo? In der Hilfe steht dazu:
Zitat:

If the uFlags parameter includes the SHGFI_USEFILEATTRIBUTES flag, this parameter does not have to be a valid file name. The function will proceed as if the file exists with the specified name and with the file attributes passed in the dwFileAttributes parameter. This allows you to obtain information about a file type by passing just the extension for pszPath and passing FILE_ATTRIBUTE_NORMAL in dwFileAttributes.
Direkt die Registry auslesen sollte nur ein absoluter Notbehelf sein. :pale::shock:

dataspider 8. Feb 2018 10:02

AW: System Icon zu Dateityp ermitteln
 
Zitat:

Zitat von uligerhardt (Beitrag 1393359)
Du meinst mit SHGetFileInfo? In der Hilfe steht dazu:
Zitat:

If the uFlags parameter includes the SHGFI_USEFILEATTRIBUTES flag, this parameter does not have to be a valid file name. The function will proceed as if the file exists with the specified name and with the file attributes passed in the dwFileAttributes parameter. This allows you to obtain information about a file type by passing just the extension for pszPath and passing FILE_ATTRIBUTE_NORMAL in dwFileAttributes.
Direkt die Registry auslesen sollte nur ein absoluter Notbehelf sein. :pale::shock:

Danke!
Habe es soeben umgesetzt und es funktioniert!:thumb:

Frank

Dalai 8. Feb 2018 19:30

AW: System Icon zu Dateityp ermitteln
 
Es gibt auch noch MSDN-Library durchsuchenExtractAssociatedIcon. Bei beiden Funktionen ist hinterher DestroyIcon zu rufen, um das Icon wieder wegzuräumen.

Grüße
Dalai

himitsu 8. Feb 2018 21:16

AW: System Icon zu Dateityp ermitteln
 
Im Demoverzeichnis von Delphi gibt es seit Jahrzehnten ein Beispiel für einen kleinen FileExplorer und da kann man sich auch das mit den Icons abschauen.

Codehunter 9. Feb 2018 17:40

AW: System Icon zu Dateityp ermitteln
 
Zitat:

Zitat von himitsu (Beitrag 1393407)
Im Demoverzeichnis von Delphi gibt es seit Jahrzehnten ein Beispiel für einen kleinen FileExplorer und da kann man sich auch das mit den Icons abschauen.

Kannst du oder jemand anders mal testen ob das auch dann funktioniert wenn es sich um Icons mit Custom Overlay handelt? Zum Beispiel wenn man ein TortoiseSVN installiert hat und im lokalen Repo abweichende Icons für Ordner angezeigt werden. Ich bin schon im WE, interessieren tuts mich aber grad weil ich an einem ähnlichen Problem hänge.

Dalai 9. Feb 2018 18:21

AW: System Icon zu Dateityp ermitteln
 
@Codehunter:
IIRC gibt es im Tortoise eine Option, die Overlays nur im Explorer zu zeigen. Daher tauchte die Frage, warum dessen Icons im Total Commander nicht sichtbar sind, schon häufiger im TC-Forum auf. Das wird bei selbstgeschriebenen Programmen nicht anders sein. Unabhängig davon bin ich nicht sicher, ob Overlays nicht generell separat behandelt werden müssen - andererseits gibt's für SHGetFileInfo das Flag SHGFI_ADDOVERLAYS.

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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