VB .NET - Displayname / Beschreibung einer Datei ermitteln

Ich wollte für ein Programm an dem ich gerade arbeite statt der Dateiendung die Beschreibung zu der Dateiendung anzeigen.

Windows selbst zeigt diese Beschreibung beispielsweise in der Statusleiste des Explorers, wenn man auf eine bekannte Datei klickt. Beispielsweise bei "*.MOV" Dateien wäre die Anzeige (je nachdem mit welchem Programm die Endung verknüpft ist) "VLC media file (.mov)" oder "Quicktime Movie".

Nunja, als ich noch mit Delphi programmierte hätte ich hierzu die Shell32 SHGetFileInfo Funktion verwendet, doch unter .NET binde ich ungerne DLLs ein, also habe ich mir eine Funktion gebastelt, die die Info aus der Registry ausliest.

''' <summary>
  ''' Retrieve the Description/Displayname for a FileExtension
  ''' </summary>
  ''' <param name="aExtension">The Extension with a leading dot</param>
  ''' <returns>The Description of an Extension</returns>
  ''' <remarks></remarks>
  Public Shared Function GetDisplayNameFromExtension(ByVal aExtension As String) As String
 
    If aExtension = String.Empty Or Not aExtension.StartsWith(".") Then Return String.Empty
 
    ' First the get the key for the extension
    ' Extension is for example ".MOV", Key is "VLC.mov"
    Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(aExtension)
 
    If key IsNot Nothing Then
 
      ' Then we look in the sub key for the description
      Dim SubkeyName As String = key.GetValue(String.Empty)
      Dim SubKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(SubkeyName)
      If SubKey IsNot Nothing Then
        Return SubKey.GetValue(String.Empty)
      End If
 
    End If
 
    Return String.Empty
  End Function

Beispielaufruf:

Msgbox(GetDisplayNameFromExtension(".zip"))

VB .NET Programm zum Autostart in der Registrierung hinzufügen

Wer hätte das gedacht... unter .NET ist auch das mittlerweile ein Klacks...

Die folgende Prozedur fügt die aktuelle Application im Bereich CurrentUser in die Registrierung als Autostart Eintrag hinzu.

Der erste Wert "My.Application.Info.Productname" ist dabei der Name des Eintrags und dessen Wert ist der komplette Dateiname des Programms, den man via "System.Reflection.Assembly.GetEntryAssembly.Location" ermitteln kann.

Die Anführungszeichen vorne und hinten sind notwendig, wenn der Pfad zum Programm Leerzeichen enthält. Ansonsten würde Windows nur das Verzeichnis statt das Programm an sich öffnen.

Public Shared Sub AddToAutorun()
    Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
    key.SetValue(My.Application.Info.ProductName, """" & System.Reflection.Assembly.GetEntryAssembly.Location & """")
End Sub