VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 用VB操作注册表(七)
发表评论(0)作者:梦里水乡, 平台:VB6.0+Win98, 阅读:11271, 日期:2001-02-13
用VB操作注册表(七)
梦里水乡

登录数据库Registry的Key的存取

相对于注册表中Value的存取,Key的存取要简单得多。要用到的API函数,除了前面提到的RegOpenKey、RegCreateKey之外,主要就还有RegEnumKey、RegDeleteKey。

Key的建立,可以采用前面提到的RegCreateKey完成,此处不再举例。

********************************************************************************

Key的读取:
单个Key的读取利用RegOpenKey显然已经足够。
我们这里要讲的是列出某个Key下的所有SubKey。比如:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows这个Key下面一般就只有两个SubKey-->CurrentVersion 和Help。要实现这个功能,需要用到RegEnumKey函数。下面是它的描述:
VB声明
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
参数说明:
hKey:Key Handle
dwIndex:欲读取的SubKey的顺序
lpName:返回所读取的SubKey的名称
cbName:传入lpName的字符串长度。
返回值: =0,表示成功;≠0,表示失败。
调用例:
Dim hKey As Long, ret As Long, Name As String, Idx As Long
List1.Clear
Idx = 0
Name = String(256, Chr(0))
Do
ret = RegEnumKey(HKEY_CURRENT_USER, Idx, Name, Len(Name))
If ret = 0 Then
List1.AddItem Left(Name, InStr(Name, Chr(0)) - 1)
Idx = Idx + 1
End If
Loop Until ret <> 0

********************************************************************************


Key的删除:会用到RegDeleteKey函数,其描述如下:
VB声明
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
参数:
hKey:Key Handle
lpSubKey:SubKey名称或者路径,若传入""[空字符串],表示删除Key本身。
返回值: =0,表示成功;≠0,表示失败。

eg:
Dim hKey,ret As Long
ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Hongqt\xiaoyuer", hKey)
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Hongqt", hKey)
ret = RegDeleteKey(hKey, "xiaoyuer")`删除HKEY_LOCAL_MACHINE\SOFTWARE\Hongqt\xiaoyuer
注意:
如果我们利用RegDeleteKey函数删除一个含有SubKey的Key时,对于Windows98和Winnt来讲是不一样的。比如我们把上面的删除调用改成ret = RegDeleteKey(hKey, ""),则在windows98下,它会连hongqt下的xiaoyuer一起删除,而在winnt下则会报错。

下面的一个子函数可以在WinNt下递归删除某个Key和它下面的所有SubKey.


Function DeleteSubkeyTree(ByVal hKey As Long, ByVal Subkey As String) As Boolean
Dim ret As Long, Index As Long, Name As String
Dim hSubKey As Long
ret = RegOpenKey(hKey, Subkey, hSubKey)
If ret <> 0 Then
DeleteSubkeyTree = False
Exit Function
End If
ret = RegDeleteKey(hSubKey, "")
If ret <> 0 Then
Name=String(256,chr(0))
If ret <> 0 Then
`RegDeleteKey无法删除,用于Winnt下。
Name = String(256, Chr(0))
While RegEnumKey(hSubkey, 0, Name, Len(Name)) = 0 And DeleteSubkeyTree(hSubkey, Name)
`递归删除Subkey的Subkey
Wend
ret = RegDeleteKey(hSubkey, "")
End If
DeleteSubkeyTree = (ret = 0)
RegCloseKey hSubkey
End Function