VBA操作注册表的三种方法
1. 利用VBA内置的方法实现。VBA内置操作注册表的四个函数分别是SaveSetting(写入注册表)、GetSetting(读取注册表)、GetAllSettings(获得注册表的键和值)和DeleteSetting(删除键或值)。但内置方法只能操作注册表中的HKEY_CURRENT_USER\\Software\\VB and VBAprogramSettings下的子键或者注册表
Sub Build_inReg()
Dim xRegKey As Variant
Dim xRegValue As Variant
Dim i As Integer
Dim xValue As String
Dim xAllKeyValueArr As Variant
On Error Resume Next
xRegKey = Array(\"KeyOne\
xRegValue
\"ValueTwo\
= Array(\"ValueOne\
'写入注册表
For i = 0 To UBound(xRegKey)
SaveSetting\"ProjectName\\"RegItems\xRegValue(i)
Next
'读取注册表
For i = 0 To UBound(xRegKey)
xValue =GetSetting(\"ProjectName\xRegKey(i),xRegValue(i))
MsgBox xValue
Next
'获取所有键值
xAllKeyValueArr
GetAllSettings(\"ProjectName\
'删除键值
xRegKey(i),
=
\"RegItems\
DeleteSetting \"ProjectName\
End Sub
2. 利用WindowsScripting Host的注册表函数来完成。WSH的RegWrite(设置注册表的键和值),RegRead(获得注册表的键和值),RegDelete(删除键和值)。
Sub WSHReg()
Dim xRegMainKey As String
Dim xRegKey As Variant
Dim xRegValue As Variant
Dim i As Integer
Dim xValue As String
Dim xWSH As Object
On Error Resume Next
Set xWSH = CreateObject(\"WScript.Shell\")
xRegMainKey = \"HKEY_CURRENT_USER\\Software\\\" '按
自己需求选择注册表主键
xRegKey = Array(\"KeyOne\\"KeyFour\")
\"KeyTwo\
xRegValue = Array(\"ValueOne\\"ValueFour\")
'写入注册表
For i = 0 To UBound(xRegKey)
xWSH.RegWritexRegMainKey + \"ProjectName\" + \"\\\" + \"RegItems\" +\"\\\" + xRegKey(i), xRegValue(i) '(xRegMainKey +\"ProjectName\" + \"\\\" + \"RegItems\" + \"\\\"+ xRegKey(i) + xRegValue(i))
Next
'读取注册表
For i = 0 To UBound(xRegKey)
xValue =xWSH.RegRead(xRegMainKey + \"ProjectName\" + \"\\RegItems\\\" +xRegKey(i))
MsgBox xValue
Next
'删除注册表
xWSH.RegDelete xRegMainKey & \"ProjectName\"& \"\\RegItems\\\"
xWSH.RegDelete xRegMainKey & \"ProjectName\\\"
End Sub
3.使用WMI(WindowsManagement Instrumentation)对象的StdRenProv类操作注册表,没有范围、功能强大。
Sub WMIReg()
Dim xValue
Dim xName
Dim xType
Dim i As Integer
Dim xStrTemp As String
Dim xWMIObj As Object
On Error Resume Next
Const HKEY_CURRENT_USER = &H80000001
Set xWMIObj =
GetObject(\"winmgmts:\\\\.\\root\\default:StdRegProv\")
xWMIObj.CreateKey
HKEY_CURRENT_USER,\"MyTest\est\" '创建注册表键值
'写入注册表
xWMIObj.SetBinaryValue HKEY_CURRENT_USER,
\"MyTest\est\
xWMIObj.SetStringValue
HKEY_CURRENT_USER,\"MyTest\est\
xWMIObj.SetDWORDValue
HKEY_CURRENT_USER,\"MyTest\est\
'读取注册表
xWMIObj.getbinaryvalue
HKEY_CURRENT_USER,\"MyTest\est\
For i = 0 To UBound(xValue)
MsgBox xValue(i)
Next
'xWMIObj.deletevalue
HKEY_CURRENT_USER,\"MyTest\est\
xWMIObj.EnumValues
HKEY_CURRENT_USER,\"MyTest\est\
For i = 0 To UBound(xName)
If xType(i) = 1Then
xWMIObj.Getstringvalue \"MyTest\est\
HKEY_CURRENT_USER,
MsgBox xValue
ElseIf xType(i) =4 Then
xWMIObj.GetDWORDValue \"MyTest\est\
HKEY_CURRENT_USER,
MsgBox xValue
End If
Next
'删除注册表
xWMIObj.DeleteKey
HKEY_CURRENT_USER,\"MyTest\est\"
xWMIObj.DeleteKey HKEY_CURRENT_USER, \"MyTest\"
End Sub
注意:
1:
HKEY_CLASSES_ROOT 0x80000000
HKEY_CURRENT_USER 0x80000001
HKEY_LOCAL_MACHINE 0x80000002
HKEY_USERS 0x80000003
HKEY_CURRENT_CONFIG 0x80000005
2:
REG_SZ(字符串型) 1
REG_EXPAND(可扩充字符串型) 2
REG_BINARY(二进制型) 3
REG_DWORD(双字节型) 4
REG_MULTI_SZ(多字符串型) 7