|
使用vba内置的savesetting等语句可以可以操作注册表,但是这些内置语句只能操作注册表中\HKEY_CURRENT_USER\Software\VB and VBA Program Settings\下的子键或注册表项,使用WMI对象的StdRegProv类可以操作注册表,并且没有范围限制、功能更强大。
WMI是Windows Management Instrumentation (Windows管理工具)的缩写,是一项核心的 Windows 管理技术。使用WMI对象可以管理Windows系统中的磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。相关资料可以参考:http://club.excelhome.net/thread-733445-1-1.html
WMI对象的StdRegProv类提供了多种操作注册表的方法,这里只是简单演示其中的几个常用方法,感兴趣的朋友可以查询StdRegProv类操作注册表的全部方法的使用说明。
Sub WMIReg()
Dim vValue
Dim vName
Dim vType
Dim i As Integer
Dim strTemp As String
Dim objWMI As Object
Const HKEY_CURRENT_USER = &H80000001
Set objWMI = GetObject("winmgmts:\\.\root\default:StdRegProv")
objWMI.CreateKey HKEY_CURRENT_USER, "MyTest\测试"
objWMI.SetBINARYValue HKEY_CURRENT_USER, "MyTest\测试", "测试1", Array(&H0, &H0, &H1)
objWMI.SetStringValue HKEY_CURRENT_USER, "MyTest\测试", "测试2", "2"
objWMI.SetDWORDValue HKEY_CURRENT_USER, "MyTest\测试", "测试3", 3
objWMI.GetBinaryValue HKEY_CURRENT_USER, "MyTest\测试", "测试1", vValue
For i = 0 To UBound(vValue)
strTemp = strTemp & vValue(i)
Next
MsgBox "注册表项“测试1”的值是:" & strTemp
objWMI.DeleteValue HKEY_CURRENT_USER, "MyTest\测试", "测试1"
objWMI.EnumValues HKEY_CURRENT_USER, "MyTest\测试", vName, vType
strTemp = "子键“测试”下共有" & UBound(vName) + 1 & "个项:" & vbCrLf
strTemp = strTemp & "名称" & vbTab & "值" & vbCrLf
For i = 0 To UBound(vName)
If vType(i) = 1 Then
objWMI.GetStringValue HKEY_CURRENT_USER, "MyTest\测试", vName(i), vValue
ElseIf vType(i) = 4 Then
objWMI.GetDWORDValue HKEY_CURRENT_USER, "MyTest\测试", vName(i), vValue
End If
strTemp = strTemp & vName(i) & vbTab & vValue & vbCrLf
Next
MsgBox strTemp
objWMI.DeleteKey HKEY_CURRENT_USER, "MyTest\测试"
objWMI.DeleteKey HKEY_CURRENT_USER, "MyTest"
End Sub
代码解析:
第8行代码声明注册表根键常量。
第9行代码使用GetObject函数返回StdRegProv类的实例并赋值给对象变量objWMI
第10行代码在注册表根键“HKEY_CURRENT_USER”中创建子键“MyTest”,在子键“MyTest”中创建子键“测试”。
StdRegProv对象的CreateKey方法在注册表根键中创建指定的子键,其语法如下:
Object. CreateKey (hDefKey, sSubKeyName)
参数hDefKey是可选的,一个注册表根键常量,指定要操作的注册表根键。默认值为 HKEY_LOCAL_MACHINE,可为下面的常量之一。
常量 值
HKEY_CLASSES_ROOT 0x80000000
HKEY_CURRENT_USER 0x80000001
HKEY_LOCAL_MACHINE 0x80000002
HKEY_USERS 0x80000003
HKEY_CURRENT_CONFIG 0x80000005
参数sSubKeyName是必需的,一个字符串表达式,指定要创建的子键名称。
第11行代码在子键“MyTest”中创建一个二进制注册表项“测试1”并设置其值。
StdRegProv对象的SetBinaryValue方法创建或设置二进制类型的注册表项。语法如下:
Object. SetBinaryValue(hDefKey, sSubKeyName, sValueName, uValue)
参数hDefKey、sSubKeyName和CreateKey方法相同。
参数sValueName是必需的,一个字符串表达式,指定注册表项的名称。
参数uValue是必需的,一个二进制数组,指定注册表项的值。
第12行代码在子键“MyTest”中创建一个字符串注册表项“测试2”并设置其值。
StdRegProv对象的SetStringValue方法创建或设置字符串类型的注册表项。语法如下:
Object. SetStringValue (hDefKey, sSubKeyName, sValueName, uValue)
参数hDefKey、sSubKeyName、sValueName和SetBinaryValue方法相同。
参数sValue是必需的,一个字符串表达式,指定注册表项的值。
第13行代码在子键“MyTest”中创建一个双字节注册表项“测试3”并设置其值。
StdRegProv对象的SetDWORDValue方法创建或设置双字节类型的注册表项。语法如下:
Object. SetDWORDValue (hDefKey, sSubKeyName, sValueName, uValue)
参数hDefKey、sSubKeyName、sValueName和SetStringValue方法相同。
参数sValue是必需的,一个双字数据,指定注册表项的值。
第14行代码获取注册表项“测试1”的值并存储到数组vValue。
StdRegProv对象的GetBinaryValue方法获取二进制注册表项的值并存储到指定的二进制数组中。其语法及参数设置和SetBinaryValue相同。
第15行到第17行代码在循环中读取数组vValue中的值并赋值给变量strTemp。
第19行代码删除注册表项“测试1”。
StdRegProv对象的DeleteValue 方法删除指定的注册表项。其语法如下:
Object. DeleteValue(hDefKey, sSubKeyName, sValueName)
参数hDefKey、sSubKeyName、sValueName和SetStringValue方法相同。
第20行代码获取子键“测试”中所有注册表项的名称和值并存储到数组vName和vType。
StdRegProv对象的EnumValues方法获取获取指定子键中所有注册表项的名称和值,并把所有注册表项的名称和值分别存储到指定的数组中。语法如下:
Object.EnumValues(hDefKey, sSubKeyName, sNames, iTypes)
参数hDefKey、sSubKeyName和SetStringValue方法相同。
参数sNames是必需的,一个字符串数组,用来存储所有注册表项的名称。此数组的元素与 iTypes 的元素一一对应。
参数iTypes是必需的,一个整数数组,用来存储所有注册表项的类型。
第23行到第30行代码在循环中判断vType数组中每个元素的值(每个值代表一种注册表项类型,其值可为下面的常量之一),并根据注册表项的类型使用相应的方法获取其值。
常量 值
REG_SZ(字符串型) 1
REG_EXPAND(可扩充字符串型) 2
REG_BINARY(二进制型) 3
REG_DWORD(双字节型) 4
REG_MULTI_SZ(多字符串型) 7
第32行代码删除注册表键“测试”。
StdRegProv对象的DeleteKey 方法删除指定的注册表键。其语法及参数设置和如下:
Object. DeleteKey (hDefKey, sSubKeyName, sValueName)
参数hDefKey、sSubKeyName和CreateKey方法相同。它只能删除没有子项的注册表键。
第33行代码删除注册表键“MyTest”。
|
评分
-
1
查看全部评分
-
|