Datei-Icons über die Endung ermitteln



  • Hi.

    Wie kann ich das Icon für eine Datei auf Grundlage der Extension ermitteln?
    Die Lösung in der FAQ funktioniert nur, wenn die Datei tatsächlich existiert.
    Es ginge hier um viele Dateien. Die brute-force-Lösung, eine dummy-Datei mit der betreffenden Endung anzulegen und dann das Icon zu holen, währe also nicht praktikabel für mich.



  • ist aber warscheinlich die einzige möglichkeit (soweit ich informiert bin) ich hab das zumindest mal so gemacht. mit createfile() (kann auch jede hd vekraften, weil die dateien dann 0 Bytes lang waren) klappt auf jeden fall super so!



  • Konsti schrieb:

    ist aber warscheinlich die einzige möglichkeit (soweit ich informiert bin)

    Die Information muß doch aber irgendwie vorhanden sein - auch ohne die Datei. Das Icon wird ja nicht in der Datei abgelegt. Also muß etwa der File-Explorer die Daten von irgendwo anders holen.
    Kann man nicht über die Datei-Endung in der Registry auf die zugehörige Anwendung schließen und aus der entsprechenden Programm-Datei das Icon extrahieren?



  • schau dir mal den Schlüssel HKEY_CLASSES_ROOT in der Registry näher an.
    Da findest du die Dateiendungen mit ".???" am Anfang des Baumes und weiter unten sind Schlüssel mit dem Syntax Dateiendung+"file" darunter ist ein
    Schlüssel DefaultIcon das einen Wert beinhaltet der auf Icon zeigt.

    mfg
    VergissEs



  • VergissEs schrieb:

    schau dir mal den Schlüssel HKEY_CLASSES_ROOT in der Registry näher an...

    Ich habe gerade eine andere Lösung gefunden (zum Glück, denn ich habe ein gestörtes Verhälnis zur Registry).
    Offenbar reicht eine kleine Änderung im "uFlags"-Parameter von "SHGetFileInfo" (SHGFI_USEFILEATTRIBUTES). Der Code baut auf dem in der FAQ auf:

    DWORD result = SHGetFileInfo(FileName.c_str(),
                                   0,
                                   &info,
                                   sizeof(SHFILEINFO),
                                   SHGFI_ICON |
                                   SHGFI_SMALLICON |
                                   SHGFI_DISPLAYNAME |
                                   SHGFI_USEFILEATTRIBUTES
                                   );
    

    Jetzt kann man z.B. auch ".mp3" übergeben und erhält den Index auf das passende Icon. Und mit jedem Aufruf von "SHGetFileInfo" wird offenbar die Image-Liste um einen Eintrag erweitert, falls das Icon für die betreffende Erweiterung nicht bereits durch einen vorangehenden Aufruf hinzugefügt wurde.
    Sehr schön, jetzt muß mir nur noch einer verraten, warum SHGFI_USEFILEATTRIBUTES diese Wirkung zeigt, obwohl der "dwFileAttributes"-Parameter 0 ist.
    Ach ja, unerfindliche Welt ... *schnief*



  • Danke für den Tip. Ich habe den FAQ-Beitrag entsprechend erweitert, ich hoffe, du bist damit einverstanden.



  • Jansen schrieb:

    Danke für den Tip. Ich habe den FAQ-Beitrag entsprechend erweitert, ich hoffe, du bist damit einverstanden.

    Na klar, war ja nicht mal meine Idee.


Anmelden zum Antworten