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属性
| 属性 | 类型 | 说明 |
|---|---|---|
LastError | String | 最后错误信息 |
方法
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 iFindFirst
查询第一个匹配的注册表值
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 IfFindLast
查询最后一个匹配的注册表值
vb
Public Function FindLast(ByVal Path As String, Optional ByVal Name As String) As VariantSaveItem
添加或修改注册表项
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 IfDeleteItem
删除注册表项
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最佳实践
- 错误检查: 操作后检查
LastError或使用返回值判断 - 权限注意: 修改 HKLM 需要管理员权限
- 备份注册表: 大规模修改前建议备份
- 使用常量: 将常用路径定义为常量
注意事项
- 注册表操作需要谨慎,错误修改可能导致系统问题
- 部分操作可能需要管理员权限
- 通过
reg命令执行,依赖系统命令行工具