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 LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As LongPrivate Const HKEY_CURRENT_USER = &H80000001Private Sub Command1_Click()
    Dim ret As Long,hKey As Long
    ret = RegOpenKeyEx(HKEY_CURRENT_USER, "Console", 0, 0, hKey) 
    If ret <> 0 Then 
MsgBox ret
Exit Sub
    End If
    RegCloseKey hKey
End Sub
我在XP环境下运行的,RegOpenKeyEx老是调用不成功,返回值是5
请问我的掉用对么?为什么会产生这样的结果啊?谢谢!

解决方案 »

  1.   

    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 
    说明 
    打开一个现有的项。在win32下推荐使用这个函数 
    返回值 
    Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码 
    参数表 
    参数 类型及说明 
    hKey Long,一个已打开项的句柄,或指定一个标准项名 
    lpSubKey String,欲打开注册表项的名字 
    ulOptions Long,未用,设为零 
    samDesired Long,带有前缀KEY_??的一个或多个常数。它们的组合描述了允许对这个项进行哪些操作 
    phkResult Long,用于装载打开项的名字的一个变量 
    Option ExplicitPrivate 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 LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Const STANDARD_RIGHTS_ALL = &H1F0000
    Private Const READ_CONTROL = &H20000
    Private Const KEY_QUERY_VALUE = &H1
    Private Const HKEY_CURRENT_USER = &H80000001
    Private Const KEY_SET_VALUE = &H2
    Private Const KEY_CREATE_LINK = &H20
    Private Const KEY_CREATE_SUB_KEY = &H4
    Private Const KEY_ENUMERATE_SUB_KEYS = &H8
    Private Const KEY_EVENT = &H1
    Private Const KEY_NOTIFY = &H10
    Private Const SYNCHRONIZE = &H100000
    Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
    Private Const REG_DWORD = 4
    Private Const REG_BINARY = 3
    Private Const REG_CREATED_NEW_KEY = &H1
    Private Const REG_NONE = 0Private Const REG_SZ = 1Private 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_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 Sub Command1_Click()
        Dim ret As Long, hk As Long
        ret = RegOpenKeyEx(HKEY_CURRENT_USER, "Console\ColorTable00", 0, KEY_READ, hk)
        If ret <> 0 Then
    MsgBox ret
    Exit Sub
        End If
        RegCloseKey hk
    End Sub
      

  2.   

    只是...你打开它并没什么意义啊...还得配合其它的东西使用比如SETVALUE什么的...
      

  3.   

    开机启动程序模块示例 
    Option ExplicitPrivate 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 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
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Const HKEY_CURRENT_USER = &H80000001
    Private Const HKEY_LOCAL_MACHINE = &H80000002
    Private Const KEY_SET_VALUE = &H2
    Private Const REG_SZ = 1Public Sub SetStartUp(ByVal b_start As Boolean)
    On Error GoTo ErrorHandle
        Dim l_Ret As Long, l_Hnd As Long, l_Len As Long
        Dim str_Key As String, str_Data As String
        
        str_Key = "software\microsoft\windows\currentversion\run"
        
        l_Ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, str_Key, 0&, KEY_SET_VALUE, l_Hnd)
        If l_Ret = 0 Then
            If b_start Then
                str_Data = App.Path & "\OAPOP.exe"
            Else
                str_Data = ""
            End If
            l_Len = Len(str_Data)
            l_Ret = RegSetValueEx(l_Hnd, "OAPOP", 0&, REG_SZ, ByVal str_Data, l_Len)
        End If
        l_Ret = RegCloseKey(l_Hnd)
        Exit Sub
    ErrorHandle:
      If Err.Number <> 0 Then
          g_str_ErrNumber = Err.Number
          g_str_ErrSource = Err.Source
          g_str_ErrDesc = Err.Description
          g_WriteLog g_str_ErrDesc
          Err.Clear
      End If
    End Sub