Skip to content

VBMAN.Regedit - 注册表操作对象

概述

VBMAN.Regedit 提供了 Windows 注册表的读写操作功能,通过调用 reg 命令行工具实现。

核心特性

  • 查询注册表项: 支持查询指定路径下的键值
  • 添加/修改键值: 支持创建或更新注册表项
  • 删除键值: 支持删除指定的注册表项
  • 类型安全: 使用 TypeRegData 类型封装返回值

数据结构

TypeRegData

注册表项数据结构

vb
Public Type TypeRegData
    HasName As Boolean  ' 是否有名称
    RegName As String   ' 键名
    RegType As String   ' 类型 (REG_SZ, REG_DWORD 等)
    RegValue As String  ' 键值
End Type

属性

属性类型说明
LastErrorString最后错误信息

方法

FindItem

查询注册表项,返回数组

vb
Public Function FindItem(ByVal Path As String, Optional ByVal Name As String) As TypeRegData()

参数:

  • Path - 注册表路径,如 "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  • Name - 键名(可选,为空则返回所有键)

返回: TypeRegData 数组

示例:

vb
Dim items() As TypeRegData
items = VBMAN.Regedit.FindItem("HKCU\Software\Microsoft\Windows\CurrentVersion\Run")

Dim i As Long
For i = LBound(items) To UBound(items)
    If items(i).HasName Then
        Debug.Print items(i).RegName & " = " & items(i).RegValue
    End If
Next i

FindFirst

查询第一个匹配的注册表值

vb
Public Function FindFirst(ByVal Path As String, Optional ByVal Name As String) As Variant

返回: 键值(字符串),未找到返回空字符串

示例:

vb
Dim value As Variant
value = VBMAN.Regedit.FindFirst("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "Notepad")
If value <> vbNullString Then
    Debug.Print "找到值: " & value
End If

FindLast

查询最后一个匹配的注册表值

vb
Public Function FindLast(ByVal Path As String, Optional ByVal Name As String) As Variant

SaveItem

添加或修改注册表项

vb
Public Function SaveItem(ByVal Path As String, ByVal Name As String, ByVal Data As Variant, Optional StartArgs As Variant, Optional IsOverWrite As Boolean = True) As Boolean

参数:

  • Path - 注册表路径
  • Name - 键名
  • Data - 键值
  • StartArgs - 启动参数(可选)
  • IsOverWrite - 是否覆盖(默认 True)

返回: True=成功, False=失败

示例:

vb
' 添加开机启动项
Dim success As Boolean
success = VBMAN.Regedit.SaveItem( _
    "HKCU\Software\Microsoft\Windows\CurrentVersion\Run", _
    "MyApp", _
    "C:\MyApp\app.exe" _
)

If success Then
    MsgBox "添加成功"
Else
    MsgBox "添加失败: " & VBMAN.Regedit.LastError
End If

DeleteItem

删除注册表项

vb
Public Function DeleteItem(ByVal Path As String, ByVal Name As String) As Boolean

示例:

vb
' 删除开机启动项
Dim success As Boolean
success = VBMAN.Regedit.DeleteItem("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "MyApp")

综合示例

示例1: 管理开机启动项

vb
Private Sub ManageStartup()
    Const RUN_PATH As String = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
    
    ' 添加启动项
    VBMAN.Regedit.SaveItem RUN_PATH, "MyApplication", App.Path & "\" & App.EXEName & ".exe"
    
    ' 查询所有启动项
    Dim items() As TypeRegData
    items = VBMAN.Regedit.FindItem(RUN_PATH)
    
    Dim i As Long
    For i = LBound(items) To UBound(items)
        If items(i).HasName Then
            List1.AddItem items(i).RegName & " = " & items(i).RegValue
        End If
    Next i
    
    ' 删除启动项
    ' VBMAN.Regedit.DeleteItem RUN_PATH, "MyApplication"
End Sub

示例2: 读取系统信息

vb
Private Sub ReadSystemInfo()
    ' 读取 Windows 版本
    Dim version As Variant
    version = VBMAN.Regedit.FindFirst("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DisplayVersion")
    Debug.Print "Windows 版本: " & version
    
    ' 读取计算机名
    Dim computerName As Variant
    computerName = VBMAN.Regedit.FindFirst("HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName", "ComputerName")
    Debug.Print "计算机名: " & computerName
End Sub

最佳实践

  1. 错误检查: 操作后检查 LastError 或使用返回值判断
  2. 权限注意: 修改 HKLM 需要管理员权限
  3. 备份注册表: 大规模修改前建议备份
  4. 使用常量: 将常用路径定义为常量

注意事项

  • 注册表操作需要谨慎,错误修改可能导致系统问题
  • 部分操作可能需要管理员权限
  • 通过 reg 命令执行,依赖系统命令行工具

VB6及其LOGO版权为微软公司所有