软件注册站
热情软件屋

 
如何用程序取到注册表中列在右边的所有项
编号: QA003447    
建立日期: 2000年10月23日 最后修改日期: 2005年8月22日
所属类别: Visual Basic - Windows API
   
    操作系统: Win2000
    编程工具: VB6.0
    问题: 如何用程序取到注册表中列在右边的所有项?
    水平: 中级(qyh)
   
    可以使用API的RegEnumValue函数。详细的例子参考:微软的Knowledge Base的文章:“178755“ How To Enumerate the Values of a Registry Key”
    
    黄凌的意见:
    主持人注:下面是一段列举注册表键,而不是注册表值的代码。
    且看洒家的代码:
    建一个模块先:
    Public Type FILETIME
     dwLowDateTime As Long
     dwHighDateTime As Long
    End Type
    
    Public 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
    
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_DYN_DATA = &H80000006
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    
    Public Const ERROR_NO_MORE_ITEMS = 259&
    Public Const ERROR_SUCCESS = 0&
    
    

    窗体上加
    list1
    list2
    label1
    label2
    command1
    
    窗体上的代码:
    Public Sub FindKeys(hKey As Long, SubKey As String)
    Dim phkRet As Long
    Dim Index As Long, Name As String, lName As Long, lReserved As Long, Class As String, lClass As Long, LWT As FILETIME
    Dim lRet As Long
    Dim Keys As String, TempKeys As String
    Static Num As Long
    lReserved = 0&
    Index = 0
    lRet = RegOpenKey(hKey, SubKey, phkRet)
    If lRet = ERROR_SUCCESS Then
     Do
     DoEvents
     Name = String(255, Chr(0))
     lName = Len(Name)
     lRet = RegEnumKeyEx(phkRet, Index, Name, lName, lReserved, Class, lClass, LWT)
     If lRet = ERROR_SUCCESS Then
     'If SubKey = "" Then
     'Keys = Name
     'Else
     Keys = SubKey & "\" & Name
     'End If
     'TempKeys = Keys
     List1.AddItem Keys
     List2.AddItem Keys
     Label1.Caption = Keys
     Num = Num + 1
     Label2.Caption = Num
     Else
     Exit Do
     End If
     Index = Index + 1
     Loop While lRet = ERROR_SUCCESS
    End If
    
    Call RegCloseKey(phkRet)
    End Sub
    
    Private Sub Command1_Click()
    'List1.Visible = False
    'List2.Visible = False
    List1.Clear
    List2.Clear
    Dim OT As Single
    OT = Timer
    List2.List(0) = ""
    Dim hKey As Long
    Dim SubKey As String
    hKey = HKEY_LOCAL_MACHINE
    
    While List2.ListCount <> 0
     DoEvents
     If Left(List2.List(0), 1) <> "\" Then
     SubKey = List2.List(0)
     Else
     SubKey = Right(List2.List(0), Len(List2.List(0)) - 1)
     End If
     Call FindKeys(hKey, SubKey)
     List2.RemoveItem 0
    Wend
    Label1.Caption = "耗时:" & Timer - OT & " 秒"
    Label2.Caption = "共计:" & List1.ListCount & " 项"
    'List1.Visible = True
    'List2.Visible = True
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    End
    End Sub
    
    

    
    相关问题:
    QA002138 "如何获取注册表中某一主键下的若干主键名"

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, Windows API, win32, api, windows api, gdi32, kernel

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio