Results 1 to 5 of 5

Thread: Populate treeview with registry

  1. #1
    grmbl's Avatar
    grmbl is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 3.0 (VS 2005/2008)
    Join Date
    Jun 2009
    Location
    Belgium
    Posts
    32
    Reputation
    51

    Post Populate treeview with registry

    Hey,

    Is there anyone here who could help me on my way to
    create my own custom "regedit"?

    First and probably only problem is iterating through the registry
    starting from the root....

    Anyone has experience with this topic?

    Any help greatly appreciated!

    grtz

    "The world is coming to an end... SAVE YOUR BUFFERS !"

  2. #2
    grmbl's Avatar
    grmbl is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 3.0 (VS 2005/2008)
    Join Date
    Jun 2009
    Location
    Belgium
    Posts
    32
    Reputation
    51
    I allready found a solution and thought it would be a good idea to post it
    here:

    Code:
    Dim root As TreeNode
            root = New TreeNode("This computer")
            root.ImageIndex = 5
            root.SelectedImageIndex = 5
    
            'HKEY_CLASSES_ROOT
            Dim rootnode As TreeNode
            rootnode = New TreeNode(Microsoft.Win32.Registry.ClassesRoot.Name.ToString)
            rootnode.ImageIndex = 4
            rootnode.SelectedImageIndex = 4
            Dim rootsubkeys() As String = Microsoft.Win32.Registry.ClassesRoot.GetSubKeyNames()
            For Each k As String In rootsubkeys
                Dim node As TreeNode
                node = New TreeNode(k)
                node.ImageIndex = 3
                node.SelectedImageIndex = 3
                Dim subkeys() As String = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(k).GetSubKeyNames()
                For Each subkeyskey As String In subkeys
                    node.Nodes.Add(subkeyskey, subkeyskey, 0, 3)
                Next
                rootnode.Nodes.Add(node)
            Next
            root.Nodes.Add(rootnode)
    
    tReg.Nodes.Add(root)
    
            tReg.Nodes(0).ExpandAll()
    This can be used to list the whole registry.
    The variables are "Microsoft.Win32.Registry.ClassesRoot" and the imageindices...

    Hope this helps someone in the future!
    "The world is coming to an end... SAVE YOUR BUFFERS !"

  3. #3
    grmbl's Avatar
    grmbl is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 3.0 (VS 2005/2008)
    Join Date
    Jun 2009
    Location
    Belgium
    Posts
    32
    Reputation
    51
    This is the more flexible code:

    NOTE: this is not recursive!!! Not everything is shown!!!

    (Uncomment imageindex/selectedimageindex if you have an imagelist set with
    appropriate images and have a treeview with that imagelist set.)

    Code:
    Public Sub RegNode(ByVal tree As TreeView, ByVal reg As Microsoft.Win32.RegistryKey)
    
            Dim tn As TreeNode
            ' Add node with name of registrykey
            tn = New TreeNode(reg.Name.ToString)
            'tn.ImageIndex = 4
            'tn.SelectedImageIndex = 4
    
            'Get all the subkeynames and put them in an array
            Dim tns() As String = reg.GetSubKeyNames()
    
            'Loop through all subkeynames and their subkeys
            For Each k As String In tns
                Dim n As TreeNode
                n = New TreeNode(k)
                'n.ImageIndex = 3
                'n.SelectedImageIndex = 3
                Try
                    Dim sk() As String = reg.OpenSubKey(k).GetSubKeyNames
                    For Each sksk As String In sk
                        'n.Nodes.Add(sksk, sksk, 3, 3)
                        n.Nodes.Add(sksk, sksk)
                    Next
                Catch ex As Exception
                    'Failsafe for subkeys that are inaccessible
                    'n.ImageIndex = 6
                    'n.SelectedImageIndex = 6
                End Try
                tn.Nodes.Add(n)
            Next
    
            tree.Nodes.Add(tn)
    
    End Sub
    Usage:
    Code:
    RegNode(tReg, Microsoft.Win32.Registry.ClassesRoot)
    Example:
    Code:
    Private Sub fRegistry_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            ' Add node with computername
            Dim root As TreeNode
            root = New TreeNode(My.Computer.Name)
            'root.ImageIndex = 5
            'root.SelectedImageIndex = 5
    
            tReg.Nodes.Add(root)
    
            RegNode(tReg, Microsoft.Win32.Registry.ClassesRoot)
            RegNode(tReg, Microsoft.Win32.Registry.CurrentConfig)
            RegNode(tReg, Microsoft.Win32.Registry.CurrentUser)
            RegNode(tReg, Microsoft.Win32.Registry.LocalMachine)
    
            ' Expand computername node
            tReg.Nodes(0).Expand()
    
    End Sub
    Last edited by grmbl; 07-02-2009 at 9:30 AM.
    "The world is coming to an end... SAVE YOUR BUFFERS !"

  4. #4
    grmbl's Avatar
    grmbl is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 3.0 (VS 2005/2008)
    Join Date
    Jun 2009
    Location
    Belgium
    Posts
    32
    Reputation
    51
    People, I need some help with this!!!
    I tried recursively populating my treeview with the registry structure
    but I'm stuck....

    This is what I have so far:
    Code:
    Private Sub fRegistry_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            ' Add node with computername
            'Dim root As TreeNode
            'root = New TreeNode(My.Computer.Name)
            'root.ImageIndex = 5
            'root.SelectedImageIndex = 5
    
            'tReg.Nodes.Add(root)
    
            'RegNode(Microsoft.Win32.Registry.ClassesRoot, tReg)
            'RegNode(Microsoft.Win32.Registry.CurrentConfig, tReg)
            'RegNode(Microsoft.Win32.Registry.CurrentUser, tReg)
            'RegNode(Microsoft.Win32.Registry.LocalMachine, tReg)
            'RegNode(Microsoft.Win32.Registry.Users, tReg)
    
            '' Expand computername node
            'tReg.Nodes(0).Expand()
    
            For Each key As Microsoft.Win32.RegistryKey In New Microsoft.Win32.RegistryKey() { _
                    Microsoft.Win32.Registry.ClassesRoot, _
                    Microsoft.Win32.Registry.CurrentConfig, _
                    Microsoft.Win32.Registry.CurrentUser, _
                    Microsoft.Win32.Registry.LocalMachine, _
                    Microsoft.Win32.Registry.Users _
                    }
                Dim rn As TreeNode
                rn = New TreeNode
                rn = TreeReg(key)
                rn.ImageIndex = 4
                rn.SelectedImageIndex = 4
                rn.Text = key.Name
                tReg.Nodes.Add(rn)
            Next
    
        End Sub
    
        Public Function TreeReg(ByVal key As Microsoft.Win32.RegistryKey) As TreeNode
    
            If key Is Nothing Then
                Return Nothing
            End If
    
            Dim tn As TreeNode
            tn = New TreeNode
    
            ' Valuenames under key
            For Each vn As String In key.GetValueNames()
                Dim valn As TreeNode
                valn = New TreeNode
                valn.Text = vn
    
                Dim value As Object = key.GetValue(vn)
                tn.Nodes.Add(valn)
            Next
    
            'Subkeynames under key/subkey
            For Each skn As String In key.GetSubKeyNames()
                Dim subn As TreeNode
                subn = New TreeNode
                subn.ImageIndex = 3
                subn.SelectedImageIndex = 3
                subn.Text = skn
    
                tn.Nodes.Add(subn)
    
                Try
                    TreeReg(key.OpenSubKey(skn))
                Catch ex As Security.SecurityException
                    ' can't search this one, just skip it
                End Try
    
            Next
    
            Return tn
    
        End Function
    The problem lies with
    Code:
    TreeReg(key.OpenSubKey(skn))
    Can anybody help to finally create something working and so it can be
    shared. (because I haven't found anything on the web like this...)

    Cheers,

    grmbl!
    "The world is coming to an end... SAVE YOUR BUFFERS !"

  5. #5
    aljeff is offline VB.NET Forum Newbie
    .NET Framework
    .NET 3.5
    Join Date
    Feb 2012
    Posts
    13
    Reputation
    18

    How about if the registry is user input?

    Quote Originally Posted by grmbl View Post
    This is the more flexible code:

    NOTE: this is not recursive!!! Not everything is shown!!!

    (Uncomment imageindex/selectedimageindex if you have an imagelist set with
    appropriate images and have a treeview with that imagelist set.)

    Code:
    Public Sub RegNode(ByVal tree As TreeView, ByVal reg As Microsoft.Win32.RegistryKey)
    
            Dim tn As TreeNode
            ' Add node with name of registrykey
            tn = New TreeNode(reg.Name.ToString)
            'tn.ImageIndex = 4
            'tn.SelectedImageIndex = 4
    
            'Get all the subkeynames and put them in an array
            Dim tns() As String = reg.GetSubKeyNames()
    
            'Loop through all subkeynames and their subkeys
            For Each k As String In tns
                Dim n As TreeNode
                n = New TreeNode(k)
                'n.ImageIndex = 3
                'n.SelectedImageIndex = 3
                Try
                    Dim sk() As String = reg.OpenSubKey(k).GetSubKeyNames
                    For Each sksk As String In sk
                        'n.Nodes.Add(sksk, sksk, 3, 3)
                        n.Nodes.Add(sksk, sksk)
                    Next
                Catch ex As Exception
                    'Failsafe for subkeys that are inaccessible
                    'n.ImageIndex = 6
                    'n.SelectedImageIndex = 6
                End Try
                tn.Nodes.Add(n)
            Next
    
            tree.Nodes.Add(tn)
    
    End Sub
    Usage:
    Code:
    RegNode(tReg, Microsoft.Win32.Registry.ClassesRoot)
    Example:
    Code:
    Private Sub fRegistry_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            ' Add node with computername
            Dim root As TreeNode
            root = New TreeNode(My.Computer.Name)
            'root.ImageIndex = 5
            'root.SelectedImageIndex = 5
    
            tReg.Nodes.Add(root)
    
            RegNode(tReg, Microsoft.Win32.Registry.ClassesRoot)
            RegNode(tReg, Microsoft.Win32.Registry.CurrentConfig)
            RegNode(tReg, Microsoft.Win32.Registry.CurrentUser)
            RegNode(tReg, Microsoft.Win32.Registry.LocalMachine)
    
            ' Expand computername node
            tReg.Nodes(0).Expand()
    
    End Sub
    Hello, All.

    I find this very very useful.
    But I'm doing modification of this codes but I can't get my wanted output.

    What if there are user inputs of registries they wanted to show not all under HKLM/HKCU/HKCR/HKCC etc.

    Example:

    HKLM\Software\Adobe
    HKCU\Software\Adobe
    HKCR\.doc

    Also if users put HKLM\SYSTEM\ControlSet001 it will combine the all same HKLM entries into one node.

    HKLM
    +Software
    +Adobe
    +SYSTEM
    +ControlSet001
    HKCU
    +Software
    +Adobe
    HKCR
    +.doc

    Hope to hear from you all.

    Regards,
    Jeff

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Harvest time tracking