使用API函数Option ExplicitType ACL
        AclRevision As Byte
        Sbz1 As Byte
        AclSize As Integer
        AceCount As Integer
        Sbz2 As Integer
End TypeType SECURITY_DESCRIPTOR
        Revision As Byte
        Sbz1 As Byte
        Control As Long
        Owner As Long
        Group As Long
        Sacl As ACL
        Dacl As ACL
End TypeType SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End TypeType FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End TypePublic Enum MainKey
  HKEY_CLASSES_ROOT = &H80000000
  HKEY_CURRENT_CONFIG = &H80000005
  HKEY_CURRENT_USER = &H80000001
  HKEY_DYN_DATA = &H80000006
  HKEY_LOCAL_MACHINE = &H80000002
  HKEY_PERFORMANCE_DATA = &H80000004
  HKEY_USERS = &H80000003
End EnumPublic Const ERROR_SUCCESS = 0&
Global Const ERROR_NONE = 0
Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259Public Enum RegType
  REG_SZ = 1
  REG_DWORD = 4
  REG_BINARY = 3
End Enum
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_EXPAND_SZ = 2
Public Const REG_DWORD_LITTLE_ENDIAN = 4
Public Const REG_DWORD_BIG_ENDIAN = 5
Public Const REG_LINK = 6
Public Const REG_MULTI_SZ = 7
Public Const REG_FULL_RESOURCE_DESCRIPTOR = 9
Public Const REG_NONE = 0
Public Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Public Const REG_NOTIFY_CHANGE_LAST_SET = &H4
Public Const REG_NOTIFY_CHANGE_NAME = &H1
Public Const REG_NOTIFY_CHANGE_SECURITY = &H8
Public Const REG_OPENED_EXISTING_KEY = &H2
Public Const REG_OPTION_BACKUP_RESTORE = 4
Public Const REG_OPTION_CREATE_LINK = 2
Public Const REG_OPTION_NON_VOLATILE = 0
Public Const REG_OPTION_RESERVED = 0
Public Const REG_OPTION_VOLATILE = 1
Public Const REG_REFRESH_HIVE = &H2
Public Const REG_RESOURCE_LIST = 8
Public Const REG_RESOURCE_REQUIREMENTS_LIST = 10
Public Const REG_WHOLE_HIVE_VOLATILE = &H1
Public Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)
Public Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE)Public Const READ_CONTROL = &H20000
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Public Const SYNCHRONIZE = &H100000
Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)Public Const KEY_CREATE_LINK = &H20
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_EVENT = &H1Public Const KEY_NOTIFY = &H10
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Public Const KEY_SET_VALUE = &H2
Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))Public Const KEY_EXECUTE = (KEY_READ)
Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKEY As Long) As Long
Declare Function RegGetKeySecurity Lib "advapi32.dll" (ByVal HKEY As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As Long) As Long
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal HKEY As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Declare Function RegFlushKey Lib "advapi32.dll" (ByVal HKEY As Long) As Long
#If UNICODE Then
  Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyW" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExW" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
  Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyW" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
  Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueW" (ByVal HKEY As Long, ByVal lpValueName As String) As Long
  Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyW" (ByVal HKEY As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
  Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExW" (ByVal HKEY As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
  Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueW" (ByVal HKEY As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
  Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyW" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
  Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyW" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExW" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyW" (ByVal HKEY As Long, ByVal lpClass As String, lpcbClass As Long, lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
  Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueW" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
  Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
  Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyW" (ByVal HKEY As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
  Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyW" (ByVal HKEY As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
  Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueW" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
  Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
  Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyW" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
  
  Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
  Declare Function RegQueryValueExByte Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
  Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
  Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExW" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
#Else
  Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
  Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
  Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal HKEY As Long, ByVal lpValueName As String) As Long
  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
  Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal HKEY As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
  Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal HKEY As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
  Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
  Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal HKEY As Long, ByVal lpClass As String, lpcbClass As Long, lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
  Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
  Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
  Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal HKEY As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
  Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal HKEY As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
  Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal HKEY As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
  Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
  Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal HKEY As Long, ByVal lpSubKey As String) As Long
  
  Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
  Declare Function RegQueryValueExByte Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
  Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
  Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
#End IfPublic Function EnumKey(hMainKey As MainKey, sSubKey As String, lIndex As Long, lpStr As String) As Boolean
'EnumKey函数打开有hMainKey主键和sSubKey子键指定的注册键,lIndex为要查询的子键值
'的索引,lpStr为放置子键值的字符串缓冲,如果要查询一个键值的所有子键,只要将lIndex
'首先设置为0,然后将lIndex递增1再调用EnumKey函数,直到函数返回0为止
    Dim HKEY As Long    '打开键的句柄
    Dim i As Long
    
    If RegOpenKey(hMainKey, sSubKey, HKEY) = ERROR_SUCCESS Then
        lpStr = Space(255) + Chr(0)
        Debug.Print Len(lpStr)
        If RegEnumKey(HKEY, lIndex, lpStr, Len(lpStr)) = ERROR_SUCCESS Then
            EnumKey = True
        Else
            EnumKey = False
        End If
    Else
        EnumKey = False
    End If
    RegCloseKey HKEY
End Function
Public Function DeleteKey(lPredefinedKey As MainKey, sKeyName As String) As Long
'DeleteKey函数打开有hPredfineKeyKey主键和sKeyName子键指定的注册键,再将此子键删除
    Dim lRetVal As Long
    Dim HKEY As Long         '打开键的句柄
        
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, HKEY)
    lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
    RegCloseKey (HKEY)
End FunctionPublic Function DeleteValue(lPredefinedKey As MainKey, sKeyName As String, sValueName As String) As Long
'DeleteValue函数删除一个值
    Dim lRetVal As Long
    Dim HKEY As Long     '打开键的句柄
    
    lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, HKEY)
    lRetVal = RegDeleteValue(HKEY, sValueName)
    RegCloseKey (HKEY)
End FunctionPublic Function SetValueEx(ByVal HKEY As MainKey, sValueName As String, lType As RegType, vValue As Variant) As Long
'SetValueEx函数设置值
'如果参数为REG_SZ则设置的值为字符串
'如果参数为REG_WORD设置的值为整数值
    Dim lValue As Long
    Dim sValue As String
    Dim bValue() As Byte
    Select Case lType
        Case REG_SZ
            sValue = vValue
            SetValueEx = RegSetValueExString(HKEY, sValueName, 0&, lType, sValue, LenB(StrConv(sValue, vbFromUnicode)))
        Case REG_DWORD
            lValue = vValue
            SetValueEx = RegSetValueExLong(HKEY, sValueName, 0&, lType, lValue, 4)
        Case REG_BINARY
            bValue = vValue
            SetValueEx = RegSetValueEx(HKEY, sValueName, 0&, lType, bValue(LBound(bValue)), UBound(bValue) - LBound(bValue) + 1)
        End Select
End FunctionFunction GetKeyValueEx(ByVal lhKey As MainKey, ByVal szValueName As String, vValue As Variant) As Long
    Dim cch As Long
    Dim lrc As Long
    Dim lType As Long
    Dim lValue As Long
    Dim sValue As String
    Dim bValue() As Byte
    
    On Error GoTo GetKeyValueExError    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
    If lrc <> ERROR_NONE Then Error 5    Select Case lType
        '查询字符串值
        Case REG_SZ:
            sValue = String(cch, 0)
            lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
            If lrc = ERROR_NONE Then
                vValue = Left$(sValue, cch - 1)
            Else
                vValue = Empty
            End If        '查询整数值
        Case REG_DWORD:
            lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
            If lrc = ERROR_NONE Then vValue = lValue
        Case REG_BINARY
            ReDim bValue(cch)
            lrc = RegQueryValueExByte(lhKey, szValueName, 0&, lType, bValue(0), cch)
            If lrc = ERROR_NONE Then
              ReDim Preserve bValue(cch - 1)
              vValue = bValue
            End If
        Case Else
            lrc = -1
    End SelectGetKeyValueExExit:    GetKeyValueEx = lrc
    Exit FunctionGetKeyValueExError:    Resume GetKeyValueExExitEnd Function
Public Function CreateNewKey(lPredefinedKey As MainKey, sNewKeyName As String)
' Description:
' 这个函数建立一个新的键
    Dim hNewKey As Long         '打开新键的句柄
    Dim lRetVal As Long
    
    lRetVal = RegCreateKeyEx(lPredefinedKey, _
                             sNewKeyName, _
                             0&, _
                             vbNullString, _
                             REG_OPTION_NON_VOLATILE, _
                             KEY_ALL_ACCESS, _
                             0&, _
                             hNewKey, _
                             lRetVal)
    RegCloseKey (hNewKey)
End FunctionPublic Function SetKeyValue(lPredefinedKey As MainKey, _
                            sKeyName As String, _
                            sValueName As String, _
                            vValueSetting As Variant, _
                            Optional lValueType As RegType = REG_SZ) As Long
       Dim lRetVal As Long
       Dim HKEY As Long         '打开键的句柄       lRetVal = RegCreateKeyEx(lPredefinedKey, _
                                sKeyName, _
                                0&, _
                                vbNullString, _
                                REG_OPTION_NON_VOLATILE, _
                                KEY_ALL_ACCESS, _
                                0&, _
                                HKEY, _
                                lRetVal)
       lRetVal = SetValueEx(HKEY, sValueName, lValueType, vValueSetting)
       SetKeyValue = lRetVal
       RegCloseKey (HKEY)
End FunctionPublic Function GetKeyValue(lPredefinedKey As MainKey, sKeyName As String, sValueName As String)
       Dim lRetVal As Long
       Dim HKEY As Long         '打开键的句柄
       Dim vValue As Variant      'setting of queried value
       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, HKEY)
       lRetVal = GetKeyValueEx(HKEY, sValueName, vValue)
       GetKeyValue = vValue
       RegCloseKey (HKEY)
End Function

解决方案 »

  1.   

    若干注册表操作的代码:
    http://www.applevb.com/sourcecode/sreg.htm
      

  2.   

    VB操作注册表--所用函数收录
    梦里水乡 VB操作注册表--所用函数收录RegOpenKey--取得SubKey的HkeyVB声明 Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" 
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long 
    参数类型及说明:
    hKey:Key Handle
    lpSubKey:SubKey名称或路径
    phkResult:若RegOpenKey执行成功,则这一参数返回Subkey的hKey.返回值: =0,表示成功;≠0,表示失败。[注意这一点与别的API函数不太一样]e.g:
    ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft", hKey) *************************************************************************RegCreateKey函数:建立SubKey
    VB声明 Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" 
    (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    它的参数用法与RegOpenKey一样。所不同的是RegOpenKey只能打开已经有的SubKey,而RegCreateKey则可以建立SubKey,比较特别的是,如果调用RegCreateKey所建立的SubKey是一个已经存在的SubKey,则它的功能和RegOpenKey相同。由于RegCreateKey的这种特性,有的程序员干脆不用RegOpenKey,而用RegCreateKey来统一代替RegOpenKey。
    e.g:
    ret = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Hongqt", hKey)************************************************************************* RegClose函数:关闭SubKey
    Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long 
    当我们不再存取Registry时,将打开或建立的SubKey关闭是一个比较好的习惯,就正如我们在使用C语言的文件打开函数后必须要关闭一样。
    e.g:
    ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft", hKey) 
    ....
    RegClose hkey
    *************************************************************************RegQueryValue--读取某Key的默认值(default value)VB声明
    Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long 
    hKey: Key Handle
    lpSubKey:SubKey名称路径
    lpValue:返回读取的Default Value
    lpcbValue:传入lpValue参数的长度,若成功读取了默认值default value,则返回default value字符串的长度(含chr(0))这个和C语言中字符串的处理相似,都是以chr(0)作为结束符。返回值: =0,表示成功;≠0,表示失败。
    e.g:
    ret = RegQueryValue(hKey, Subkey, "", lenS) ************************************************************************* RegSetValue--删除某Key的默认值(default value)VB声明
    Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long 
    hKey:Key Handle
    lpSubKey:Subkey名称或路径
    dwType:数据类型,但在这里只能接受REG_SZ[字符串类型]
    lpData:所设置的字符串
    cbData:lpData字符串的长度,这一长度包括chr(0)字符。
    关于dwType的可能取值
    Enum ValueType 
    REG_NONE = 0 
    REG_SZ = 1 
    REG_EXPAND_SZ = 2 
    REG_BINARY = 3 
    REG_DWORD = 4 
    REG_DWORD_BIG_ENDIAN = 5 
    REG_MULTI_SZ = 7 
    End Enum e.g:
    Function SetDefaultValue(ByVal hKey As Long, ByVal Subkey As String, ByVal Value As String) As Boolean 
    Dim ret As Long, lenS As Long, S As String 
    ret = RegSetValue(hKey, Subkey, REG_SZ, Value, LenB(StrConv(Value, vbFromUnicode)) + 1) SetDefaultValue = (ret = 0) 
    End Function ************************************************************************* RegQueryValueEx--读取某Key的特定名称的值(Value)
    Vb声明和参数解释:
    Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long 
    hkey:Key Handle
    lpValueName:Value Name
    lpReserved:保留参数,调用时设置为0即可
    lpType:返回读取的数据类型
    lpData:返回读取的数据
    lpcbData:传入lpData数据的长度,若成功读取数据,则返回所读取的数据的长度。
    返回值: =0,表示成功;≠0,表示失败。
    说明:
    1、 这一函数除了可读取指定名称的值之外,也可以读取default value。如果要读取default value,只需要将
    参数lpValueName设置为""[空字符串]即可。
    2、lpType 的可能取值
    Enum ValueType 
    REG_NONE = 0 
    REG_SZ = 1 -->字符串
    REG_EXPAND_SZ = 2 -->可展开式字符串
    REG_BINARY = 3 -->Binary数据
    REG_DWORD = 4 -->长整数
    REG_DWORD_BIG_ENDIAN = 5 -->BIG_ENDIAN长整数
    REG_MULTI_SZ = 7 -->多重字符串
    End Enum e.g:
    Dim hKey As Long, ret As Long, lenData As Long, typeData As Long 
    Dim Name As String
    '读取HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run的internat.exe的value.
    Name="internat.exe"
    ret=RegOpenKey(HKEY_LOCAL_MACHINE,"Software\Microsoft\Windows\CurrentVersion\Run", hKey) 
    if ret=0 then
    ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal vbNullString, lenData)'注意ByVal千万别忘了
    end if*************************************************************************RegEnumValue--列出某Key的所有名称的值Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long 
    '以下的两个函数是经过王国荣老师改编过的函数,与此相关,也一并列出.并且在我们的例子程序中要用到它们。RegEnumValueAsAny可以传入长整数和字符串;RegEnumValueAsAny2中lpData参数被改成Any后,可以使用Byte数组,由于Byte数组是采用”传地址方式来传递参数的,可以省下复制字符串数据的时间,使得程序变得更加高效。
    Declare Function RegEnumValueAsAny Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long Declare Function RegEnumValueAsAny2 Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, lpValueName As Any, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    参数说明:
    hKey:Key Handle
    dwIndex:欲读取之名称的顺序
    lpValueName:返回所读取的名称
    lpcbValueName:传入lpValueName参数的长度,返回所读取的名称的长度,注意这一长度不含chr(0)
    lpReserved:保留参数,实际使用时传入ByVal 0即可
    lpType:返回所读取的数据类型
    lpData:返回所读取的数据
    lpcbData:传入lpData,返回所读取的数据长度
    返回值: =0,表示成功;≠0,表示失败。 
    调用例子:
    ret=0
    myindex=0
    while ret=0
    ret=RegEnumValue(hkey,myindex,Name,ByVal 0, typeData, ByVal vbNullString, lenData)
    myindex=myindex+1
    wend *************************************************************************RegSetValueEx--设置某Key特定名称的值(Value)Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
    参数:
    hKey:Key Handle
    lpValueName:Value名称
    Reserved:保留参数,具体使用时置为0即可
    dwType:数据类型
    lpData:所设置的数据,注意这一参数被定义成lpData As Any,所以要传入字符串数据时别忘了在参数前加保留字ByVal
    cbData:数据的长度。注意:如果写入的数据属于REG_SZ、REG_EXPAND_SZ、REG_MULTI_SZ类型时,则这个长度应该包含chr(0)字符。
    返回值: =0,表示成功;≠0,表示失败。
    e.g:
    Dim hKey As Long 
    Dim L As Long 
    L = 99999 
    RegCreateKey HKEY_CURRENT_USER, "Software\SetValue", hKey 
    RegSetValueEx hKey, "LongData", 0, REG_DWORD, L, 4 
    ************************************************************************* RegDeleteValue--删除某Key的某一名称Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long 
    参数:
    hKey:Key Handle
    lpValueName: Value名称,如果想删除默认值的话,传入""[空字符串]即可。 
    返回值: =0,表示成功;≠0,表示失败。
    函数调用例:
    '我们假设在HKEY_CURRENT_USER\Software\SetValue有:
    '预设值--VB操作注册表
    'str1--我爱我的祖国
    '我们要删除这两个Value 
    ret = RegOpenKey(HKEY_CURRENT_USER, "Software\SetValue", hKey) 
    If ret = 0 Then 
    RegDeleteValue hKey, "Str1" 
    MsgBox "已删除HKCU\Software\SetValueSubKeyStr1Value" 
    RegDeleteValue hKey, "" 
    MsgBox "已删除HKCU\Software\SetValueSubKey‘预设值’" 
    End If*************************************************************************RegEnumKey--列出某Key的所有SubKeyDeclare 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 *************************************************************************RegDeleteKey--删除Key或者SubKeyDeclare 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下则会报错。
      

  3.   

    我要回复 | 我感兴趣 | 打印贴子 | 推荐给朋友 | 关闭窗口  
    主  题:关于注册表。紧急!!!
    作  者:fengyuyan
    所属论坛:Visual Basic
    问题点数:28
    回复次数:11
    发表时间:2001-5-30 22:41:00
     
      
      如何把注册表主键下的键值读到列表框中。 
    回复贴子: 
     回复人:fengyuyan(风雨岩) (2001-5-30 22:42:00)  得0分 
    大家帮忙,一定给分。小弟先谢谢了!  
     回复人:sjc0722(★刀剑笑★) (2001-5-30 22:55:00)  得0分 
    VC++中有个函数,不过VB我就不太清楚了!!  
     回复人:Amoon(阿木) (2001-5-30 22:57:00)  得0分 
    hehe,有现成的。看看你的VB安装路径下的\Template\Code目录,里面有个"注册表访问.bas"里面封装了操作注册表的函数。  
     回复人:fengyuyan(风雨岩) (2001-6-1 21:09:00)  得0分 
    我的意思是,程序自动,把主键下的所有键和键值自动读入,就像filelist,装入文件一样。
     
     回复人:unruledboy(兄弟,拜托,给点专业精神好!(南海佬)) (2001-6-1 21:21:00)  得0分 
    我有现成的VB代码:
    [email protected]  
     回复人:shuyi(舒易) (2001-6-1 22:05:00)  得0分 
    看看我发表的文章就知道了
    http://www.csdn.net/develop/read_article.asp?id=7608
    里面写的很详细的,我贴了现成的代码你copy一下就可以调用了。  
     回复人:Wuxyingshu(无影石) (2001-6-1 22:08:00)  得0分 不看是你的损失:http://my.6to23.com/vbnetcn/vb6/vbjqq/vbjqq.htm  
     回复人:pencat(呆猫) (2001-6-1 22:44:00)  得0分 
    Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
        Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
        lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
        If lResult = 0 Then
            If lValueType = REG_SZ Then
                strBuf = String(lDataBufSize, Chr$(0))
                lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
                If lResult = 0 Then
                    RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
                End If
            ElseIf lValueType = REG_BINARY Then
                Dim strData As Integer
                lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
                If lResult = 0 Then
                    RegQueryStringValue = strDatae
                End If
            End If
        End If
    End Function
    Function GetString(hKey As Long, strPath As String, strValue As String)
        Dim Ret
        RegOpenKey hKey, strPath, Ret
        GetString = RegQueryStringValue(Ret, strValue)
        RegCloseKey Ret
    End Function'调用
    sAvEpAth = GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Origin Worlds Online\Ultima Online\1.0", "ExePath")
     
     回复人:fengyuyan(风雨岩) (2001-6-2 16:18:00)  得0分 
    to : unruledboy
      源代码,谢了。 [email protected]  
     回复人:watercat17(水猫) (2001-6-2 16:34:00)  得0分 
    用 getsetting函数啊,很简单的  
     回复人:LANDEHUTU() (2001-6-2 21:48:00)  得0分 
    我同意watercat17(水猫)的意见,就是一个现成的函数getsetting,很简单,五分钟看帮助都够了.我用过.   
    --------------------------------------------------------------------------------
     
    我要回复: 有人参与讨论这个问题,请用EMail通知我  
     返回问题 | 关闭窗口 
      

  4.   

    用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
      

  5.   

    用VB操作注册表(六)
    梦里水乡登录数据库Registry的Value的存取--删除某Key的Value这个功能很容易实现。主要是要调用相应的API函数--RegDeleteValue,以下是它的一些描述:
    VB声明
    Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    参数:
    hKey:Key Handle
    lpValueName: Value名称,如果想删除默认值的话,传入""[空字符串]即可。返回值: =0,表示成功;≠0,表示失败。函数调用例:
    `我们假设在HKEY_CURRENT_USER\Software\SetValue有:
    `预设值--VB操作注册表
    `str1--我爱我的祖国
    `我们要删除这两个Value
    ret = RegOpenKey(HKEY_CURRENT_USER, "Software\SetValue", hKey)
    If ret = 0 Then
    RegDeleteValue hKey, "Str1"
    MsgBox "已删除HKCU\Software\SetValueSubKeyStr1Value"
    RegDeleteValue hKey, ""
    MsgBox "已删除HKCU\Software\SetValueSubKey‘预设值’"
    End If
      

  6.   

    csdn的代码区就有。自己去下个看看不就好了。