'------------------------------------------------------------------------------------------------------------- '- 获得已存在的注册表关键字的值... '- 如果 ValueName="" 则返回 KeyName 项的默认值... '- 如果指定的注册表关键字不存在, 则返回空串... '- 参数说明: KeyRoot--根类型, KeyName--子项名称, ValueName--值项名称, ValueType--值项类型 '------------------------------------------------------------------------------------------------------------- Public Function GetKeyValue(KeyRoot As KeyRoot, KeyName As String, ValueName As String, Optional ValueType As Long) As String Dim TempValue As String ' 注册表关键字的临时值 Dim Value As String ' 注册表关键字的值 Dim ValueSize As Long ' 注册表关键字的值的实际长度 TempValue = Space(1024) ' 存储注册表关键字的临时值的缓冲区 ValueSize = 1024 ' 设置注册表关键字的值的默认长度
' 返回注册表关键字的的值... Select Case ValueType ' 通过判断关键字的类型, 进行处理 Case REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ TempValue = Left$(TempValue, ValueSize - 1) ' 去掉TempValue尾部空格 Value = TempValue Case REG_DWORD ReDim dValue(3) As Byte RegQueryValueEx hKey, ValueName, 0, REG_DWORD, dValue(0), ValueSize For i = 3 To 0 Step -1 Value = Value + String(2 - Len(Hex(dValue(i))), "0") + Hex(dValue(i)) ' 生成长度为8的十六进制字符串 Next i If CDbl("&H" & Value) < 0 Then ' 将十六进制的 Value 转换为十进制 Value = 2 ^ 32 + CDbl("&H" & Value) Else Value = CDbl("&H" & Value) End If Case REG_BINARY If ValueSize > 0 Then ReDim bValue(ValueSize - 1) As Byte ' 存储 REG_BINARY 值的临时数组 RegQueryValueEx hKey, ValueName, 0, REG_BINARY, bValue(0), ValueSize For i = 0 To ValueSize - 1 Value = Value + String(2 - Len(Hex(bValue(i))), "0") + Hex(bValue(i)) + " " ' 将数组转换成字符串 Next i End If End Select
' 关闭注册表关键字... RegCloseKey hKey GetKeyValue = Trim(Value) ' 返回函数值 End Function
和VB中使用API函数访问注册表一样。提供VB、VBA、Office二次开发
免费咨询、有偿技术支持:
CO.:Vansoft Workroom
MSN:[email protected]
Email:[email protected]
[email protected]
TEL:025-86685867(范)
'- 获得已存在的注册表关键字的值...
'- 如果 ValueName="" 则返回 KeyName 项的默认值...
'- 如果指定的注册表关键字不存在, 则返回空串...
'- 参数说明: KeyRoot--根类型, KeyName--子项名称, ValueName--值项名称, ValueType--值项类型
'-------------------------------------------------------------------------------------------------------------
Public Function GetKeyValue(KeyRoot As KeyRoot, KeyName As String, ValueName As String, Optional ValueType As Long) As String
Dim TempValue As String ' 注册表关键字的临时值
Dim Value As String ' 注册表关键字的值
Dim ValueSize As Long ' 注册表关键字的值的实际长度
TempValue = Space(1024) ' 存储注册表关键字的临时值的缓冲区
ValueSize = 1024 ' 设置注册表关键字的值的默认长度
' 打开一个已存在的注册表关键字...
RegOpenKeyEx KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey
' 获得已打开的注册表关键字的值...
RegQueryValueEx hKey, ValueName, 0, ValueType, ByVal TempValue, ValueSize
' 返回注册表关键字的的值...
Select Case ValueType ' 通过判断关键字的类型, 进行处理
Case REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ
TempValue = Left$(TempValue, ValueSize - 1) ' 去掉TempValue尾部空格
Value = TempValue
Case REG_DWORD
ReDim dValue(3) As Byte
RegQueryValueEx hKey, ValueName, 0, REG_DWORD, dValue(0), ValueSize
For i = 3 To 0 Step -1
Value = Value + String(2 - Len(Hex(dValue(i))), "0") + Hex(dValue(i)) ' 生成长度为8的十六进制字符串
Next i
If CDbl("&H" & Value) < 0 Then ' 将十六进制的 Value 转换为十进制
Value = 2 ^ 32 + CDbl("&H" & Value)
Else
Value = CDbl("&H" & Value)
End If
Case REG_BINARY
If ValueSize > 0 Then
ReDim bValue(ValueSize - 1) As Byte ' 存储 REG_BINARY 值的临时数组
RegQueryValueEx hKey, ValueName, 0, REG_BINARY, bValue(0), ValueSize
For i = 0 To ValueSize - 1
Value = Value + String(2 - Len(Hex(bValue(i))), "0") + Hex(bValue(i)) + " " ' 将数组转换成字符串
Next i
End If
End Select
' 关闭注册表关键字...
RegCloseKey hKey
GetKeyValue = Trim(Value) ' 返回函数值
End Function