Icon nur per endung ermitteln

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Icon nur per endung ermitteln

    Hallo Leute!
    Wie schaffe ich es, das ich z.B: ein PDF Datei die dazu gehörige Icon bekomme, ohne das ich es per Datei mit komplettem Pfad extrahieren muss?
    Ich habe zwar diesen Code gefunden.

    VB.NET-Quellcode

    1. Function getIcon(ByVal ext As String) As Icon
    2. 'Get the register value for the specified key
    3. Dim regVal As String = My.Computer.Registry.GetValue(regKey & ext, "", Nothing)
    4. Dim iconVal As String = ""
    5. Dim filen As String
    6. Dim nIndex As Integer
    7. Try
    8. 'Specify the icon for .exe files
    9. If ext = ".exe" Then
    10. iconVal = "shell32.dll,2"
    11. 'Specifi the common procedure
    12. ElseIf regVal <> "" Then
    13. If Not My.Computer.Registry.GetValue(regKey & regVal & "\DefaultIcon", "", Nothing) = Nothing Then
    14. iconVal = My.Computer.Registry.GetValue(regKey & regVal & "\DefaultIcon", "", Nothing)
    15. Else
    16. iconVal = "shell32.dll,0"
    17. End If
    18. ElseIf ext = "dir" Then
    19. iconVal = "shell32.dll,4"
    20. End If
    21. If iconVal.Length < 5 Then
    22. iconVal = "shell32.dll,0"
    23. End If
    24. Catch ex As Exception
    25. MsgBox("Error in icon")
    26. End Try
    27. Dim splt() As String = iconVal.Split(",")
    28. filen = splt(0).Trim(" ").Trim(Char.ConvertFromUtf32(34))
    29. nIndex = splt(1).Trim(" ")
    30. Dim icon As Icon
    31. icon = getIconFromEx(filen, nIndex)
    32. Return icon
    33. End Function

    Aber er findet nicht alle.
    Im Explorer ist PDF Icon vorhanden.
    Also muss es irgendwie im System registriert sein
    hab aber keine Ahnung wie ich per Datei Endung es ermitteln kann. ?(
    @Cheffboss der zweite Tipp ist absolut klasse, der holt Icons registrierter und unregistrierter Programme / Dateien raus, und wenn es die Extension nicht gibt, kommt ein leeres Blatt.
    @tommy Das ist Deine Lösung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Cheffboss!
    Danke für deine schnelle Antwort :)
    Leider kann ich die links die du mir gegeben hast nichts anfangen :(
    1 Link
    Es sind nicht alle Icon von Anwendungen im DLL vorhanden, und wenn doch eine DLL gibt, woher soll das Programm herausfinden im welchen DLL und Index das richtige Icon ist.
    2 Link
    Da ich ja die Datei mit Pfad brauche, und das ist ja keine gute Programmierung wenn das Programm jedes mal bei neu laden die Datei mit gleichen endung sucht und extrahiert um das icon zu erhalten.

    Ich habe Win 10 und die PDF wird von MicrosoftEdge bereit gestellt.
    Ich habe das Bild in der Registierung gefunden
    es liegt
    Computer\HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Packages\Microsoft.MicrosoftEdge_44.18362.267.0_neutral__8wekyb3d8bbwe\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge\windows.fileTypeAssociation\.pdf
    mit einer Zeichenfolge Wert
    C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\Assets\MicrosoftEdgePDF.targetsize-63.png
    jetzt frage ich mich wie z.B: Explorer es weiß wo die Icons sind von jeweiligen Dateitypen ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tommy“ ()

    tommy schrieb:

    wie z.B: Explorer es weiß wo die Icons sind von jeweiligen Dateitypen
    Exakt genau das passiert im Code, der im zweiten Link steht. :rolleyes:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab mal nen eigenen Explorer programmiert. Dort wollte ich dann auch die Datei Icons anzeigen aber nicht immer wieder neu ermitteln.

    Hierfür habe ich ein Dictionary verwendet in dem die Icons drin sind und die Dateiendung als Key verwendet wird. Dazu hatte ich mir ne Methode, geschrieben, welche den Dateipfad übergeben habe und das passende Icon zurück erhalten habe. Gab es das Icon im Dictionary nicht, wurde es ermittelt (siehe 2. Link von @chefboss) und im Dictionary eingefügt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen