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版权为微软公司所有