定义我就不写了。你自己加上去吧。
'读取注册表中是否有选定参数
'用法:    rValue = RegistryGetKeyValue(rrkHKeyLocalMachine, "software\microsoft\windows\currentversion\run", "法院数据库系统")
Public Function RegistryGetKeyValue(eRootKey As EnumRegistryRootKeys, strKeyName As String, strValueName As String) As Variant
  
  Dim lngRetVal As Long
  Dim lngHKey As Long
  Dim varValue As Variant
  Dim strValueData As String
  Dim abytValueData() As Byte
  Dim lngValueData As Long
  Dim lngValueType As Long
  Dim lngDataSize As Long
  
  On Error GoTo PROC_ERR
  
  varValue = Empty
  
  lngRetVal = RegOpenKeyEx(eRootKey, strKeyName, 0&, mcregKeyQueryValue, lngHKey)
  
  If mcregErrorNone = lngRetVal Then
    
    lngRetVal = RegQueryValueExNULL(lngHKey, strValueName, 0&, lngValueType, 0&, lngDataSize)
    
    If lngRetVal = mcregErrorNone Then
      
          If lngDataSize > 0 Then
            strValueData = String(lngDataSize, 0)
            lngRetVal = RegQueryValueExString(lngHKey, strValueName, 0&, lngValueType, strValueData, lngDataSize)
            If InStr(strValueData, vbNullChar) > 0 Then
              strValueData = Mid$(strValueData, 1, InStr(strValueData, vbNullChar) - 1)
            End If
          End If
          If mcregErrorNone = lngRetVal Then
            varValue = left$(strValueData, lngDataSize)
          Else
            varValue = Empty
          End If
        
 
    End If
    
    RegCloseKey (lngHKey)
  End If
  
  'Return varValue
  RegistryGetKeyValue = varValue
Exit Function
PROC_ERR:
  MsgBox "Error: " & Err.Number & ". " & Err.Description, , "RegistryGetKeyValue"
End Function

解决方案 »

  1.   

    ret = RegOpenKey(HKEY_CURRENT_USER, "Software\ODBC\ODBC.INI\ODBC DATA SOURCES", hKey)idx = 0
    While ret = 0
    lenName = 256ret = RegEnumValueAsAny2(hKey, idx, bName(0), lenName, ByVal 0, typeData, ByVal vbNullString, lenData)'上面的RegEnumValueAsAny2调用得到了第一个Name的长度lenName,不含chr(0)
    Name = String(lenName + 1, Chr(0))
    lenName = Len(Name)s = String(lenData, Chr(0))
    RegEnumValueAsAny hKey, idx, Name, lenName, ByVal 0, typeData, ByVal s, lenData
    s = Left(s, InStr(s, Chr(0)) - 1)
    If s <> "" Then
    txtserver.AddItem Left(Name, InStr(Name, Chr(0)) - 1) & "(" & s & ")"
    End If
    idx = idx + 1
    Wend
    RegCloseKey hKey
    End Sub
    看看吧
      

  2.   

    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
      

  3.   

    用vb的一个本身的函数撒,好象是get什么的