copyright 1999 - 2014 by heinz prelle - hannover  - lenbachstraße 42 - www.visual-basic5.de | impressum
'Beispiel: VB .Net - Explorer - Kontextmenue setzen das auf einen bestimmten Dateityp reagiert

'Registrierdatenbank: Bestimmten Dateitypen einer ausfuehrenden Anwendung zuweisen
'
'Testen Sie das Beispiel indem sie mit z.B. mit notepad.exe eine Datei mit der Dateiendung .pro erzeugen
'Starten Sie das Beispiel.
'Die Dateiendung .pro wird nun in der Registriedatenbank unter HKEY_CLASSES_ROOT\.pro mit den
'Unterschluesseln: \Shell\Dateitype .pro oeffnen\command\ mit dem Standardwert: notepad.exe "%1"
'eingetragen.
'Wenn Sie jetzt einen Rechts-Klick auf die zuvor angelegte .pro Datei ausfuehren wird im erscheinenden
'Kontextmenue die angegebene Beschreibung "Dateitype .pro oeffnen" angezeigt. Klicken Sie jetzt auf diesen
'Eintrag um die .pro Datei mit dem angegebenen ausfuehrenden Programm zu oeffnen.
'
'Hinweis: Das Beispiel wurde unter Windows XP getestet. Die Dateiendung .pro dient hier nur zu demonstrations-
'zwecken. Sie koennen auch jederzeit eine andere Dateiendung verwenden.
'
Option Explicit On
Option Strict On

Imports Microsoft.Win32

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click
        If Me.TextBox1.Text.Length = 0 Then Return
        SetContextMenu.SetFileType = Me.TextBox1.Text
        If Me.TextBox2.Text.Length = 0 Then Return
        SetContextMenu.MenuDescription = Me.TextBox2.Text

        SetContextMenu.OpenedApplication = "notepad.exe ""%1"""
        SetContextMenu.SetFileTypeToExplorerContextmenu()
    End Sub

    Public Class SetContextMenu

        Private Shared _setfiletype As String = String.Empty
        Public Shared Property SetFileType() As String
            Get
                Return _setfiletype
            End Get
            Set(ByVal value As String)
                _setfiletype = value
            End Set
        End Property

        Private Shared _description As String = String.Empty
        Public Shared Property MenuDescription() As String
            Get
                Return _description
            End Get
            Set(ByVal value As String)
                _description = value
            End Set
        End Property

        Private Shared _openedapplication As String = String.Empty
        Public Shared Property OpenedApplication() As String
            Get
                Return _openedapplication
            End Get
            Set(ByVal value As String)
                _openedapplication = value
            End Set
        End Property

        Private Shared ReadOnly Property ValueNameShell() As String
            Get
                Return "Shell"
            End Get
        End Property

        Private Shared ReadOnly Property ValueNameCommand() As String
            Get
                Return "Command"
            End Get
        End Property

        Public Shared Sub SetFileTypeToExplorerContextmenu()
            Try
                If (Not SetFileType() Is Nothing) And _
                        (Not MenuDescription() Is Nothing) And _
                        (Not OpenedApplication() Is Nothing) Then

                    Using FileType As RegistryKey = Registry.ClassesRoot.CreateSubKey(SetFileType())
                        Using [Shell] As RegistryKey = FileType.CreateSubKey(ValueNameShell)
                            Using Description As RegistryKey = [Shell].CreateSubKey(MenuDescription())
                                Using OpeningApplication As RegistryKey = Description.CreateSubKey(ValueNameCommand)
                                    OpeningApplication.SetValue("", OpenedApplication())
                                End Using
                            End Using
                        End Using
                    End Using
                Else
                    Throw New Exception(ErrorMessage())
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message(), "Info")
            End Try
        End Sub

        Private Shared Function ErrorMessage() As String
            Return "Der benoetigte Dateityp wurde nicht initialisiert."
        End Function

    End Class

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MyBase.Load
        With Me
            .Text = "Explorer - Kontextmenue setzen das auf einen bestimmten Dateityp reagiert"
            .Button1.Text = "Setzen..."
            .CenterToScreen()
            .TextBox1.Text = ".pro"
            .TextBox2.Text = "Dateitype .pro oeffnen"
            .Label1.Text = "Dateityp:"
            .Label2.Text = "Beschreibung"
        End With
    End Sub

End Class
Sourcecode Visual Basic