Public 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
存在返回ERROR_SUCCESS = 0,HKEY为打开的键
不存在返回错误码

解决方案 »

  1.   

    Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long,父键,你可以用table1中任意值或自己已经打开的键
                           ByVal lpSubKey As String,键路径字符串比如"software/microsoft"不能以“/”开始
                           ByVal ulOptions As Long,选项你可以使用table2中任意值,一般设0
                           ByVal samDesired As Long,对新键操作权限的设置,使用table3中的任意值,建议用KEY_ALL_ACCESS就是了
                           phkResult As Long,这里是操作成功返回的新键
                           ) As Long
    //table 1
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    //table 2
    Public Const REG_OPTION_BACKUP_RESTORE = 4     ' open for backup or restore
    Public Const REG_OPTION_CREATE_LINK = 2        ' Created key is a symbolic link
    Public Const REG_OPTION_NON_VOLATILE = 0       ' Key is preserved when system is rebooted
    Public Const REG_OPTION_RESERVED = 0           ' Parameter is reserved
    Public Const REG_OPTION_VOLATILE = 1           ' Key is not preserved when system is rebooted
    //table 3
    Public Const KEY_CREATE_LINK = &H20
    Public Const KEY_CREATE_SUB_KEY = &H4
    Public Const KEY_ENUMERATE_SUB_KEYS = &H8
    Public Const KEY_EVENT = &H1     '  Event contains key event record
    Public Const KEY_NOTIFY = &H10
    Public Const KEY_QUERY_VALUE = &H1
    Public Const KEY_SET_VALUE = &H2
    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_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
    Public Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
    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))
      

  2.   

    那么如果一个键值的内容是空,但是却有那个键存在
    怎么判断?
    是一样的方法吗?我想判断一个没有值的键是否存在,如何写代码?
    答对了我另外开贴给你加分,说到做到。例如有个字符型的键,内容为空
    我怎么知道它是内容为空还是根本没这个键呢?
    请给我详细代码,说出你想要的分数,可以的话,最好在100以内,谢谢
    人总是要成长的,让我们大家一起在CSDN里成长为新一代的高手吧!
    想吵架的人闪一边去,我们只来学习,不学习的请安静!!!
      

  3.   

    VB操作注册表:
    http://www.sqreg.com/file/vb/reg_01.htm
    http://www.sqreg.com/file/vb/reg_02.htm
    http://www.sqreg.com/file/vb/reg_03.htm
    http://www.sqreg.com/file/vb/reg_04.htm
    http://www.sqreg.com/file/vb/reg_05.htm
    http://www.sqreg.com/file/vb/reg_06.htm
    http://www.sqreg.com/file/vb/reg_07.htm
      

  4.   

    Option Explicit
    Option Compare Text '这是注册表编辑器的排序方法Private 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
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
    Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Private Declare Function RegEnumKeyA Lib "advapi32.dll" (ByVal hKey As Long, ByVal dwIndex As Long, lpName As Any, ByVal cbName As Long) As Long
    Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, lpValueName As Any, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    Private 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
    Private 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
    Private 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
    Private 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 LongPrivate Const REG_NONE = 0
    Private Const REG_SZ = 1
    Private Const REG_EXPAND_SZ = 2
    Private Const REG_BINARY = 3
    Private Const REG_DWORD = 4
    Private Const REG_DWORD_BIG_ENDIAN = 5
    Private Const REG_DWORD_LITTLE_ENDIAN = 4
    Private Const REG_LINK = 6
    Private Const REG_MULTI_SZ = 7
    Private Const REG_RESOURCE_LIST = 8
    Private Const REG_FULL_RESOURCE_DESCRIPTOR = 9
    Private Const REG_RESOURCE_REQUIREMENTS_LIST = 10Public Enum RegDataType
        RDT_None = REG_NONE
        RDT_SZ = REG_SZ
        RDT_Expand_SZ = REG_EXPAND_SZ
        RDT_Binary = REG_BINARY
        RDT_DWord = REG_DWORD
        RDT_DWord_Big_Endian = REG_DWORD_BIG_ENDIAN
        RDT_Multi_SZ = REG_MULTI_SZ
    End EnumPrivate Const HKEY_CLASSES_ROOT = &H80000000
    Private Const HKEY_CURRENT_USER = &H80000001
    Private Const HKEY_LOCAL_MACHINE = &H80000002
    Private Const HKEY_USERS = &H80000003
    Private Const HKEY_PERFORMANCE_DATA = &H80000004
    Private Const HKEY_CURRENT_CONFIG = &H80000005
    Private Const HKEY_DYN_DATA = &H80000006
    Private Const HKEY_PERF_ROOT = HKEY_LOCAL_MACHINEPublic Enum RegRootKey
        RRK_CLASSES_ROOT = HKEY_CLASSES_ROOT
        RRK_CURRENT_USER = HKEY_CURRENT_USER
        RRK_LOCAL_MACHINE = HKEY_LOCAL_MACHINE
        RRK_USERS = HKEY_USERS
        RRK_PERFORMANCE_DATA = HKEY_PERFORMANCE_DATA
        RRK_CURRENT_CONFIG = HKEY_CURRENT_CONFIG
        RRK_DYN_DATA = HKEY_DYN_DATA
    End EnumPrivate Const KEY_QUERY_VALUE = &H1
    Private Const KEY_SET_VALUE = &H2
    Private Const KEY_CREATE_SUB_KEY = &H4
    Private Const KEY_ENUMERATE_SUB_KEYS = &H8
    Private Const KEY_NOTIFY = &H10
    Private Const KEY_CREATE_LINK = &H20
    Private Const KEY_LENGTH_MASK = &HFFFF0000Private Const READ_CONTROL = &H20000Private Const SYNCHRONIZE = &H100000
    Private Const STANDARD_RIGHTS_ALL = &H1F0000
    Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
    Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
    Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
    Private 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))
    Private Const KEY_EXECUTE = (KEY_READ)Private Const ERROR_SUCCESS = 0&
    Private Const ERROR_MORE_DATA = 234Public RegError As LongPublic Function GetRegRootKeyName(RootKey As RegRootKey) As String
        Select Case RootKey
            Case RRK_CLASSES_ROOT: GetRegRootKeyName = "HKEY_CLASSES_ROOT"
            Case RRK_CURRENT_USER: GetRegRootKeyName = "HKEY_CURRENT_USER"
            Case RRK_LOCAL_MACHINE: GetRegRootKeyName = "HKEY_LOCAL_MACHINE"
            Case RRK_USERS: GetRegRootKeyName = "HKEY_USERS"
            Case RRK_PERFORMANCE_DATA: GetRegRootKeyName = "HKEY_PERFORMANCE_DATA"
            Case RRK_CURRENT_CONFIG: GetRegRootKeyName = "HKEY_CURRENT_CONFIG"
            Case RRK_DYN_DATA: GetRegRootKeyName = "HKEY_DYN_DATA"
        End Select
        
    End FunctionPublic Function RegCheckKey(ByVal RootKey As RegRootKey, _
            Optional ByRef SubKey As String = vbNullString) As Boolean
        Dim hKey As Long
        
        If SubKey = "" Then SubKey = vbNullString
        If Right(SubKey, 1) = "\" Then SubKey = Left$(SubKey, Len(SubKey) - 1)
        
        If RegOpenKeyEx(RootKey, SubKey, 0, KEY_ALL_ACCESS, hKey) = ERROR_SUCCESS Then
            RegCloseKey hKey
            RegCheckKey = True
        Else
            RegCheckKey = False
        End If
        
    End FunctionPublic Function RegSplitKey(ByRef KeyPath As String, _
            ByRef RootKey As RegRootKey, _
            ByRef SubKey As String) As Boolean
        Dim RootKeyStr As String
        Dim I As Long
        
        I = InStr(KeyPath, "\")
        RootKeyStr = Left$(KeyPath, I - 1)
        SubKey = Mid$(KeyPath, I + 1)
        RootKeyStr = UCase$(RootKeyStr)
        
        For I = RRK_CLASSES_ROOT To RRK_DYN_DATA
            If RootKeyStr = GetRegRootKeyName(I) Then
                RootKey = I
                Exit For
            End If
        Next I
        
        If I > RRK_DYN_DATA Then Exit Function
        
        RegSplitKey = RegCheckKey(RootKey, SubKey)
        
    End Function
      

  5.   

    bestofbest(咖啡):
    你把键和值搞混了
    其实KEY是注册表编辑器中所描述的“项”
    而值是有二进制,双字节以及字符型区别的
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, 
                              ByVal lpValueName As String, 
                              ByVal lpReserved As Long, 使用table2中的值一般为0
                              lpType As Long, 使用table4中的值,一般使用REG_SZ即字符串型
                              lpData As Any, 数据的接收指针,可以用个STRING或VARIANT
                              lpcbData As Long,返回了数据的字节数,记得减掉结尾的空字符
                              ) As Long
    //table 4
    Private Const REG_NONE = 0
    Private Const REG_SZ = 1
    Private Const REG_EXPAND_SZ = 2
    Private Const REG_BINARY = 3
    Private Const REG_DWORD = 4
    Private Const REG_DWORD_BIG_ENDIAN = 5
    Private Const REG_DWORD_LITTLE_ENDIAN = 4
    Private Const REG_LINK = 6
    Private Const REG_MULTI_SZ = 7
    Private Const REG_RESOURCE_LIST = 8
    Private Const REG_FULL_RESOURCE_DESCRIPTOR = 9
    Private Const REG_RESOURCE_REQUIREMENTS_LIST = 10这是对值进行查询的函数
    不过我现在也只能对字符串型的值加以查询返回
    二进制字串老是没有办法返回
    注册表相关函数其实还有不少没法一一细解了
    有什么可以发信给我我们可以一起研究
    [email protected]
    分就不必了
    我又没用