📄 form1.vb
字号:
Imports Microsoft.Win32
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写处置以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意:以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents Splitter1 As System.Windows.Forms.Splitter
Friend WithEvents TreeView1 As System.Windows.Forms.TreeView
Friend WithEvents ListView1 As System.Windows.Forms.ListView
Friend WithEvents type As System.Windows.Forms.ColumnHeader
Friend WithEvents data As System.Windows.Forms.ColumnHeader
Friend WithEvents ImageList1 As System.Windows.Forms.ImageList
Friend WithEvents LVname As System.Windows.Forms.ColumnHeader
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.Panel1 = New System.Windows.Forms.Panel()
Me.TreeView1 = New System.Windows.Forms.TreeView()
Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
Me.Splitter1 = New System.Windows.Forms.Splitter()
Me.ListView1 = New System.Windows.Forms.ListView()
Me.LVname = New System.Windows.Forms.ColumnHeader()
Me.type = New System.Windows.Forms.ColumnHeader()
Me.data = New System.Windows.Forms.ColumnHeader()
Me.Panel1.SuspendLayout()
Me.SuspendLayout()
'
'Panel1
'
Me.Panel1.Controls.AddRange(New System.Windows.Forms.Control() {Me.TreeView1})
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Left
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(200, 413)
Me.Panel1.TabIndex = 0
'
'TreeView1
'
Me.TreeView1.Dock = System.Windows.Forms.DockStyle.Fill
Me.TreeView1.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TreeView1.ImageList = Me.ImageList1
Me.TreeView1.Name = "TreeView1"
Me.TreeView1.Nodes.AddRange(New System.Windows.Forms.TreeNode() {New System.Windows.Forms.TreeNode("我的电脑", 2, 2, New System.Windows.Forms.TreeNode() {New System.Windows.Forms.TreeNode("HKEY_CLASSES_ROOT", 0, 1), New System.Windows.Forms.TreeNode("HKEY_CURRENT_USER", 0, 1), New System.Windows.Forms.TreeNode("HKEY_LOCAL_MACHINE", 0, 1), New System.Windows.Forms.TreeNode("HKEY_USERS", 0, 1), New System.Windows.Forms.TreeNode("HEKY_CURRENT_CONFIG", 0, 1)})})
Me.TreeView1.Size = New System.Drawing.Size(200, 413)
Me.TreeView1.TabIndex = 0
'
'ImageList1
'
Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)
Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
'
'Splitter1
'
Me.Splitter1.Location = New System.Drawing.Point(200, 0)
Me.Splitter1.Name = "Splitter1"
Me.Splitter1.Size = New System.Drawing.Size(3, 413)
Me.Splitter1.TabIndex = 1
Me.Splitter1.TabStop = False
'
'ListView1
'
Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.LVname, Me.type, Me.data})
Me.ListView1.Dock = System.Windows.Forms.DockStyle.Fill
Me.ListView1.FullRowSelect = True
Me.ListView1.Location = New System.Drawing.Point(203, 0)
Me.ListView1.Name = "ListView1"
Me.ListView1.Size = New System.Drawing.Size(429, 413)
Me.ListView1.SmallImageList = Me.ImageList1
Me.ListView1.Sorting = System.Windows.Forms.SortOrder.Ascending
Me.ListView1.TabIndex = 2
Me.ListView1.View = System.Windows.Forms.View.Details
'
'LVname
'
Me.LVname.Text = "名称"
Me.LVname.Width = 100
'
'type
'
Me.type.Text = "类型"
Me.type.Width = 100
'
'data
'
Me.data.Text = "数据"
Me.data.Width = 160
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(632, 413)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ListView1, Me.Splitter1, Me.Panel1})
Me.Name = "Form1"
Me.Text = "注册表浏览器"
Me.Panel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
addRoot()
End Sub
Private Function GetKey(ByVal node As TreeNode) As RegistryKey
Dim path As String = node.FullPath
Dim key As RegistryKey = Registry.LocalMachine
'不是根节点
If path.Length > 4 Then
Dim tokens() As String = path.Split(New Char() {"\"})
Select Case tokens(1)
Case "HKEY_CLASSES_ROOT"
key = Registry.ClassesRoot
Case "HKEY_CURRENT_USER"
key = Registry.CurrentUser
Case "HKEY_LOCAL_MACHINE"
key = Registry.LocalMachine
Case "HKEY_USERS"
key = Registry.Users
Case "HKEY_CURRENT_CONFIG"
key = Registry.CurrentConfig
End Select
'去掉我的电脑
path = path.Substring(6)
'如果不是根键,找出路径,取得注册键对象
If path.IndexOf("\") > 0 Then
path = path.Substring(path.IndexOf("\") + 1)
Try
key = key.OpenSubKey(path)
Catch e As Exception
MessageBox.Show(e.Message)
End Try
End If
End If
Return key
End Function
'在树型控件中添加子节点
Private Sub AddTreeNode(ByVal node As TreeNode)
If node.GetNodeCount(False) = 0 Then
Dim key As RegistryKey = GetKey(node)
Dim subkey() As String
Try
subkey = key.GetSubKeyNames()
Dim i As Integer
For i = 0 To subkey.Length - 1
node.Nodes.Add(subkey(i))
Next
Catch
End Try
End If
End Sub
Private Sub addRoot()
Dim i As Integer
For i = 0 To TreeView1.TopNode.GetNodeCount(False) - 1
Try
AddTreeNode(TreeView1.TopNode.Nodes(i))
Catch e As Exception
MessageBox.Show(e.Message)
End Try
Next
End Sub
Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
If TreeView1.SelectedNode.Text = "我的电脑" Then
Dim i As Integer
For i = 0 To TreeView1.SelectedNode.GetNodeCount(False) - 1
Try
AddTreeNode(TreeView1.SelectedNode.Nodes(i))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Next
End If
ListView1.Items.Clear()
Dim key As RegistryKey
key = GetKey(TreeView1.SelectedNode)
Dim names() As String = key.GetValueNames()
Dim valueName As String
Dim ValueType, ValueData As Object
Dim k As Integer
For k = 0 To names.Length - 1
valueName = names(k)
ValueData = key.GetValue(valueName)
ValueType = key.GetType()
Dim li As ListViewItem
If Convert.ToString(ValueType) = "System.String" Then
ValueType = "REG_DWORD"
li = New ListViewItem(New String() {valueName, Convert.ToString(ValueType), Convert.ToString(ValueData)}, 3)
Else
ValueType = "REG_SZ"
li = New ListViewItem(New String() {valueName, Convert.ToString(ValueType), Convert.ToString(ValueData)}, 4)
End If
ListView1.Items.Add(li)
Next
End Sub
Private Sub TreeView1_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
Dim i As Integer
For i = 0 To TreeView1.SelectedNode.GetNodeCount(False) - 1
Try
AddTreeNode(e.Node.Nodes(i))
Catch ex As Exception
'MessageBox.Show(ex.Message)
End Try
Next
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -