比如我想得到HKEY_LOCAL_MACHINE\SOFTWARE\Hongqt下aaa的数值。该怎么办?
我用以下的方法得到的是空值,并且有内存报错的信息: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 RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
-----------------------------------------------------------------
Dim hKey As Long, ret As Long, lenData As Long, typeData As Long
Dim Name As String
Dim c As Variant
Name = "aaa"
ret = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Hongqt", hKey)
If ret = 0 Then
ret = RegQueryValueEx(hKey, Name, 0, typeData, ByVal vbNullString, lenData)
Select Case typeData
    Case REG_SZ
         S = String(lenData, Chr(0))
         RegQueryValueEx hKey, Name, 0, typeData, ByVal S, lenData '注意ByVal千万别忘了
         S = Left(S, InStr(S, Chr(0)) - 1)        Text1.Text = Str(c)
End Select

解决方案 »

  1.   

    sBuffer = Space$(255)     'make a buffer
    lBufferSize = Len(sBuffer)
    rtn = RegQueryValueEx(hKey, Entry, 0, REG_SZ, sBuffer, lBufferSize)
      

  2.   

    Const REG_SZ = 1 ' Unicode nul terminated string
    Const REG_BINARY = 3 ' Free form binary
    Public 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 LongPublic Function GetString(hKey As Long, strPath As String, strValue As String) As String
        Dim Ret
        RegOpenKey hKey, strPath, Ret
        GetString = RegQueryStringValue(Ret, strValue)
        RegCloseKey Ret
    End Function
    private sub command1_click()
        'Get reg Path value
        Ret = GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\10.0\Excel\InstallRoot", "Path")
        If Ret = "" Then 
    MsgBox "No value found !", vbExclamation + vbOKOnly, App.Title
    Exit sub
        else
    text1.text=Ret
        end if
    end sub
      

  3.   

    拷掉了。RegQueryStringValue 再来。
    Const REG_SZ = 1 ' Unicode nul terminated string
    Const REG_BINARY = 3 ' Free form binary
    Public 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 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 Longprivate sub command1_click()
        'Get reg Path value
        Ret = GetString(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\10.0\Excel\InstallRoot", "Path")
        If Ret = "" Then 
    MsgBox "No value found !", vbExclamation + vbOKOnly, App.Title
    Exit sub
        else
    text1.text=Ret
        end if
    end subPublic Function GetString(hKey As Long, strPath As String, strValue As String) As String
        Dim Ret
        RegOpenKey hKey, strPath, Ret
        GetString = RegQueryStringValue(Ret, strValue)
        RegCloseKey Ret
    End FunctionFunction RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
        Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
        'retrieve information about the key
        lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
        If lResult = 0 Then
            If lValueType = REG_SZ Then
                'Create a buffer
                strBuf = String(lDataBufSize, Chr$(0))
                'retrieve the key's content
                lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
                If lResult = 0 Then
                    'Remove the unnecessary chr$(0)'s
                    RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
                End If
            ElseIf lValueType = REG_BINARY Then
                Dim strData As Integer
                'retrieve the key's value
                lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
                If lResult = 0 Then
                    RegQueryStringValue = strData
                End If
            End If
        End If
    End Function
      

  4.   

    maskzha:
    RegQueryStringValue(Ret, strValue)要声明吗?我找了API没有找到
      

  5.   

    maskzha:太感谢您了!!!!!!!
    请接分!!