Ganze Registry auflisten (TreeView, Like Regedit)

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von _PASCAL_.

    Ganze Registry auflisten (TreeView, Like Regedit)

    Hallo,

    ich würde gerne sowas ähnliches wie regedit basteln.

    wie ich ein TreeView bastle weis ich ... auch wie ich RegistryKeys auslesen.


    Das problem liegt darin dass ich nicht weis wie ich die schleifen verschachteln soll, da ich ja nicht weis wie tief die OrdnerStruktur der Registry ist. Bzw des aktuellen Knotens.

    will ja nicht von vorn herein sagen ich verschachtle 10 schleifen fix ... das ist ja doof und dann gibts 11 ^^

    habt ihr da ne idee?

    also alle HKEYS
    UPDATE

    So hab das ganze jetzt zum laufen gebracht ... aber es dauert ewig bis das ganze angezeigt wird ...
    wenn ich aus VisualStudio heraus das ding startet steht nacht 5min noch nichts da ... als Standalone .exe ohne Debug kommt das ganze mal nach 1,5min ... absolut inakzeptabel ... da is der windows eigene "regedit" viel schneller ... warum ?

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class frm_main
    3. Private counter As Integer = 0
    4. Private Sub frm_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    5. Dim imageList As New ImageList
    6. imageList.Images.Add(My.Resources.folder)
    7. regTree.ImageList = imageList
    8. Dim rootnode As TreeNode
    9. rootnode = getnodes(My.Computer.Registry.ClassesRoot)
    10. rootnode.ImageIndex = 0
    11. regTree.Nodes.Add(rootnode)
    12. rootnode = getnodes(My.Computer.Registry.CurrentUser)
    13. rootnode.ImageIndex = 0
    14. regTree.Nodes.Add(rootnode)
    15. rootnode = getnodes(My.Computer.Registry.LocalMachine)
    16. rootnode.ImageIndex = 0
    17. regTree.Nodes.Add(rootnode)
    18. rootnode = getnodes(My.Computer.Registry.Users)
    19. rootnode.ImageIndex = 0
    20. regTree.Nodes.Add(rootnode)
    21. rootnode = getnodes(My.Computer.Registry.CurrentConfig)
    22. rootnode.ImageIndex = 0
    23. regTree.Nodes.Add(rootnode)
    24. End Sub
    25. Private Function getnodes(ByVal regkey As RegistryKey) As TreeNode
    26. Dim parts() As String = regkey.Name.Split("\")
    27. Dim temp As New TreeNode(parts.Last)
    28. Dim subkey As RegistryKey
    29. temp.ImageIndex = 0
    30. If regkey.SubKeyCount > 0 Then
    31. For Each keyName As String In regkey.GetSubKeyNames
    32. Try
    33. subkey = regkey.OpenSubKey(keyName)
    34. temp.Nodes.Add(getnodes(subkey))
    35. Catch ex As Exception
    36. counter += 1
    37. End Try
    38. Next
    39. End If
    40. Return temp
    41. End Function
    42. Private Sub frm_main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    43. regTree.Height = Me.Height - 60
    44. End Sub
    45. End Class


    -----------------------------------------------------------------------------------------------------------------------------------
    OLD

    Moin,

    ich dachte auch schon in diese Richtung wusste aber nicht wie ich es angehen soll ... iwie kann ichs mir nicht vorstellen

    hab mal das gebastelt ... denke das geht in die Richtung aber will nicht ganz

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class frm_main
    3. Private Sub frm_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    4. getnodes(My.Computer.Registry.CurrentUser)
    5. End Sub
    6. Private Sub getnodes(ByVal regkey As RegistryKey)
    7. Dim temp As New TreeNode(regkey.Name)
    8. Dim subkey As RegistryKey
    9. If regkey.SubKeyCount > 0 Then
    10. For Each keyName As String In regkey.GetSubKeyNames
    11. subkey = regkey.OpenSubKey(keyName)
    12. getnodes(subkey)
    13. Next
    14. End If
    15. regTree.Nodes.Add(temp)
    16. End Sub
    17. End Class



    UPDATE ^^

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class frm_main
    3. Private Sub frm_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    4. Dim rootnode As TreeNode
    5. rootnode = getnodes(My.Computer.Registry.CurrentUser)
    6. regTree.Nodes.Add(rootnode)
    7. End Sub
    8. Private Function getnodes(ByVal regkey As RegistryKey) As TreeNode
    9. Dim temp As New TreeNode(regkey.Name)
    10. Dim subkey As RegistryKey
    11. If regkey.SubKeyCount > 0 Then
    12. For Each keyName As String In regkey.GetSubKeyNames
    13. subkey = regkey.OpenSubKey(keyName)
    14. temp.Nodes.Add(getnodes(subkey))
    15. Next
    16. End If
    17. Return temp
    18. End Function
    19. End Class


    so jetzt läuft die geschichte ^^ danke ;) ... manche haben einen fehler produziert deshalb hab ich Try eingebaut ...

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class frm_main
    3. Private Sub frm_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    4. Dim rootnode As TreeNode
    5. rootnode = getnodes(My.Computer.Registry.CurrentUser)
    6. regTree.Nodes.Add(rootnode)
    7. End Sub
    8. Private Function getnodes(ByVal regkey As RegistryKey) As TreeNode
    9. Dim parts() As String = regkey.Name.Split("\")
    10. Dim temp As New TreeNode(parts.Last)
    11. Dim subkey As RegistryKey
    12. If regkey.SubKeyCount > 0 Then
    13. For Each keyName As String In regkey.GetSubKeyNames
    14. Try
    15. subkey = regkey.OpenSubKey(keyName)
    16. temp.Nodes.Add(getnodes(subkey))
    17. Catch ex As Exception
    18. End Try
    19. Next
    20. End If
    21. Return temp
    22. End Function
    23. Private Sub frm_main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    24. regTree.Height = Me.Height - 60
    25. End Sub
    26. End Class
    Bilder
    • tree.JPG

      34,98 kB, 1.023×728, 268 mal angesehen

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „_PASCAL_“ ()