如可用API在注册表中枚举某一项下所有子项的名称呀???

charmw 2004-03-29 09:09:25
如题 大哥们帮忙!!!
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2004-03-29
  • 打赏
  • 举报
回复
用api函数RegEnumKeyEx和RegEnumValue

RegEnumKeyEx:
【VB声明】
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long

【别名】
RegEnumKeyExA

【说明】
枚举指定项下方的子项

【返回值】
Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码

【参数表】
hKey ----------- Long,一个已打开项的句柄,或者指定一个标准项名
dwIndex -------- Long,欲获取的子项的索引。第一个子项的索引编号为零
lpName --------- String,用于装载指定索引处项名的一个缓冲区
lpcbName ------- Long,指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)。一旦返回,它会设为实际装载到lpName缓冲区的字符数量
lpReserved ----- Long,未用,设为零
lpClass -------- String,项使用的类名。可以为vbNullString
lpcbClass ------ Long,用于装载lpClass缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字符数量
lpftLastWriteTime - FILETIME,枚举子项上一次修改的时间


RegEnumValue:
【VB声明】
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long

【别名】
RegEnumValueA

【说明】
枚举指定项的值

【返回值】
Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码

【参数表】
hKey ----------- Long,一个已打开项的句柄,或者指定一个标准项名
dwIndex -------- Long,欲获取值的索引。注意第一个值的索引编号为零
lpValueName ---- String,用于装载位于指定索引处值名的一个缓冲区
lpcbValueName -- Long,用于装载lpValueName缓冲区长度的一个变量。一旦返回,它会设为实际载入缓冲区的字符数量
lpReserved ----- Long,未用;设为零
lpType --------- Long,用于装载值的类型代码的变量
lpData --------- Byte,用于装载值数据的一个缓冲区
lpcbData ------- Long,用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际载入缓冲区的字符数量


例子:
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Private Sub Form_Paint()
Dim hKey As Long, Cnt As Long, sSave As String
'Clear the form
Me.Cls
Me.Print "RegEnumKeyEx"
'Open a registry key
RegOpenKey HKEY_LOCAL_MACHINE, "Enum", hKey
Do
'Create a buffer
sSave = String(255, 0)
'Enumerate the keys
If RegEnumKeyEx(hKey, Cnt, sSave, 255, 0, vbNullString, ByVal 0&, ByVal 0&) <> 0 Then Exit Do
'Print the result to the form
Me.Print StripTerminator(sSave)
Cnt = Cnt + 1
Loop
'Close the registry key
RegCloseKey hKey
Me.Print vbCrLf + "RegEnumValue:"
'Open a new key
RegOpenKey HKEY_CURRENT_CONFIG, "Display\Fonts", hKey
Cnt = 0
Do
'Create a buffer
sSave = String(255, 0)
'enumerate the values
If RegEnumValue(hKey, Cnt, sSave, 255, 0, ByVal 0&, ByVal 0&, ByVal 0&) <> 0 Then Exit Do
'pritn the results to the form
Me.Print StripTerminator(sSave)
Cnt = Cnt + 1
Loop
'Close the registry
RegCloseKey hKey
End Sub
'This function is used to stripoff all the unnecessary chr$(0)'s
Private Function StripTerminator(sInput As String) As String
Dim ZeroPos As Integer
'Search the first chr$(0)
ZeroPos = InStr(1, sInput, vbNullChar)
If ZeroPos > 0 Then
StripTerminator = Left$(sInput, ZeroPos - 1)
Else
StripTerminator = sInput
End If
End Function

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧