Explorer-Icons überschreiben

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Explorer-Icons überschreiben

    Moin!

    ich habe bei uns ein SVN im Einsatz das über "Zusatz-Icons" das bestehende "überblendet".



    Nun haben wir das generelle Problem, dass oftmals Dateinamen zu lang sind.

    Ich würde gerne etwas erstellen mit dem die Länge von Dateinamen überprüft und bei mehr als 256 Zeichen das Icon entsprechend mit einem Zusatzicon versieht.

    Kann mir einer sagen wie man soetwas machen kann..

    * ÜberblendIcon selber
    * einbinden in den Windows-Explorer
    * ... (was ich sonst noch vergessen haben könnte)

    Gruß Jan
    @jan99 Da würdest Du Symptome, nicht aber Ursachen bekämpfen.
    Eigentlich sollte das SVN zu lange Dateinamen abwehren,
    eigentlich sollte das Studio zu lange Dateinamen abwehren,
    eigentlich sollte es eine Codierungsrichtlinie geben, die das regelt.
    Da zu einem bestehenden Projekt relativ selten neue Dateien hinzugefügt werden, könnte es reichen, die Länge der Dateinamen mit einem externen Tool (selbst geschrieben) zu überwachen.
    Und wenn man schon mal da eingreift, kann man dieses Tool im PostBuild-Step des Hauptprogramms aufrufen, dass dann eine Ausgabe und einen Fehler erzeugt, wenn ein zu langer Dateiname gefunden wurde.
    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!
    Habs mir selber noch nicht angeschaut aber das ist auf jedenfall der richtige weg:
    docs.microsoft.com/de-de/windo…dlers?redirectedfrom=MSDN
    docs.microsoft.com/en-us/previ…s.85)?redirectedfrom=MSDN

    Und hier ist das Ganze dokumentiert:
    codeproject.com/Articles/54578…ell-Icon-Overlay-Handlers
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Moin!

    Danke Euch beiden.

    Vollzitat eines Vorposts durch Anredefunktion ersetzt ~VaporiZed

    @RodFromGermany
    Das SVN musste als Beispiel herhalten!

    Mir geht es um die allgemeine Dateiablage.

    Jan

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

    Moin!

    ich hatte mir das auf codeproject angesehen und bin dann noch über dieses Beispiel gestolpert: activevb.de/rubriken/kolumne/kol_47/emptyfolderoverlay.html

    Da hier viel in Deutsch ist und das Beispiel schon in Ansätzen in meine Richtung geht habe ich daran mich weiter versucht. Mein Projekt heißt nun: EBL_ExplorerFileNameLength

    Dann habe ich eine ClassLibrary angelegt und mit NuGet das SharpShell Tool eingebunden. Als nächsts noch ein Icon definiert ...



    und den Code übersetzen lassen.

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Collections.Generic
    3. Imports System.Linq
    4. Imports System.Text
    5. Imports System.Threading.Tasks
    6. Imports System.Drawing
    7. Imports SharpShell.SharpIconOverlayHandler
    8. Imports SharpShell.Interop
    9. Imports System.Runtime.InteropServices
    10. Imports System.IO
    11. <ComVisible(True)>
    12. Public Class EmptyFolderOverlayHandler
    13. Inherits SharpIconOverlayHandler
    14. Protected Overrides Function GetOverlayIcon() As Icon
    15. Return EmptyFolderOverlay.Properties.Resources.OverlayIcon
    16. End Function
    17. Protected Overrides Function GetPriority() As Integer
    18. Return 10
    19. End Function
    20. Protected Overrides Function CanShowOverlay(ByVal path As String, ByVal attributes As SharpShell.Interop.FILE_ATTRIBUTE) As Boolean
    21. Try
    22. If (attributes And FILE_ATTRIBUTE.FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
    23. Dim timeLimit As DateTime = DateTime.Now.AddMilliseconds(1000)
    24. Return pathIsEmpty(path, timeLimit)
    25. End If
    26. Return False
    27. Catch __unusedException1__ As Exception
    28. Return False
    29. End Try
    30. End Function
    31. Protected Function pathIsEmpty(ByVal path As String, ByVal timeLimit As DateTime) As Boolean
    32. For Each f As String In Directory.EnumerateFiles(path)
    33. If Not f.EndsWith("Thumbs.db") Then
    34. Return False
    35. End If
    36. Next
    37. For Each d As String In Directory.EnumerateDirectories(path)
    38. If (DateTime.Now > timeLimit) OrElse Not pathIsEmpty(d, timeLimit) Then
    39. Return False
    40. End If
    41. Next
    42. Return True
    43. End Function
    44. End Class


    Es wird aber nur die erste Funktion

    VB.NET-Quellcode

    1. Protected Overrides Function GetOverlayIcon() As Icon
    2. Return EmptyFolderOverlay.Properties.Resources.OverlayIcon
    3. End Function


    mit folgenden Meldungen angemerkt.



    Ich dachte schon über meinen Namen als Basis für die Auslesung der Properties zu gehen - aber das stellt die weiteren Optionen schon gar nicht zur Verfügung.

    Kann mir einer weiterhelfen?

    Gruß Jan

    jan99 schrieb:

    Kann mir einer weiterhelfen?
    Da fehlt ggf. ein

    VB.NET-Quellcode

    1. Import System.Drawing
    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!
    @RodFromGermany
    Negative, dies wurde in den Snipper erledigt.

    Ich denke hierbei handelt es sich um ein eigenes Definiertes Icon von der Sharpshell .dll da der Fehler darüber anmerkt, dass der Rückgabetyp nicht der Selbe ist.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    @Gather Jou.
    Da hat er wohl ein A.Icon und ein B.Icon und ggf. per Import das falsche drinne oder so was in der Richtung.
    @jan99 Kläre uns mal auf.
    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!

    Neu

    @jan99 Du hast zwei Typen in unterschiedlichen Namespaces, die beide Icon heißen.
    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!

    Neu

    Moin!

    wenn Du mich jetzt sehen würdest, dann würde ich auf den Finger rum beizen.

    Ich habe nur den Code aus Explorer-Icons überschreiben und da finde ich Icon nur einmal.

    Es liegt vermutlich auch daran, dass ich noch etwas Probleme mit dem "richtigen" hantieren mit Namespaces habe.

    Gruß Jan

    Neu

    @HenryV Das ises nich.
    @jan99 Du hast eine Basisklasse und eine abgeleitete Klasse.
    Dier Funktion GetOverlayIcon() As Icon sehen verschiedene Icon-Deklarationen, Dein ScreenShot in Post #5.
    Du hast wahrscheinlich WinForm- und WPF-Klassen gemixt.
    Räume da mal auf.
    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!