GetSetting(appname, section, key[, default])

解决方案 »

  1.   

    它好像只能得到hkey_users里VB.....里的键的值,我想得到hkey_local_machine里software里的某一键的值
      

  2.   

    Option Explicit
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_DYN_DATA = &H80000006
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_USERS = &H80000003Public Const REG_SZ = 1                         ' Unicode nul terminated string
    Public Const REG_DWORD = 4Public 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 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))Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Public 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
    Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    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
    Public 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
    Public 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
    Public 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 LongPublic Function RunMDAC(lFindSubKey As Long, sKeyName As String, sValueName As String, sMDACVerSion As String) As Boolean
        
        Dim lRetVal As Long
        Dim hKey As Long         '打开键的句柄
        Dim vValue As Variant      'setting of queried value
        On Error GoTo PROC_ERR
        
        RunMDAC = False
        lRetVal = RegOpenKeyEx(lFindSubKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
        lRetVal = ReadRegisterMDAC(hKey, sValueName, vValue) 
        'vValue就是所需键值PROC_EXIT:
        Exit Function
        
    PROC_ERR:
        MsgBox Err & vbCrLf & vbCrLf & Err.Description, vbCritical, "警告!"
        GoTo PROC_EXIT
    End Function
    Public Function ReadRegisterMDAC(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
        ' ************************************************
        ' 读取 MDAC 的注册字符串
        ' ************************************************
        Dim cch As Long
        Dim lrc As Long
        Dim lType As Long
        Dim lValue As Long
        Dim sValue As String
        
        On Error GoTo PROC_ERR
        
        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)
                Else
                    vValue = Empty
                End If        '查询整数值
            Case REG_DWORD:
                lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
                If lrc = ERROR_NONE Then vValue = lValue
            Case Else
                lrc = -1
        End Select
        
    PROC_EXIT:
        ReadRegisterMDAC = lrc
        Exit Function
        
    PROC_ERR:
        GoTo PROC_EXIT
        
    End Function
      

  3.   

    Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
      

  4.   

    to:ganzhiruogy(方竹) 
    有没有简单点的方法?
      

  5.   

    试试这个对象,取值非常简单:
      Dim oWsh As New IWshRuntimeLibrary.IWshShell_Class
      dim strGetValue as string
      strGetValue=oWsh.Regread(bstrName)
      
      

  6.   

    to :hz1101(我学!我学!!我学!!!...)
    请教 IWshRuntimeLibrary 是??
    msdn中没有!
      

  7.   

    vb 安装好后,附带一个bas文件,里面提供了访问注册表需要的函数,怎么就没人发现吗?
      

  8.   

    IWshRuntimeLibrary 怎么得到呀?
      

  9.   

    感谢您使用微软产品。IWshRuntimeLibrary实际上就是Windows Script Host(WSH)的类型库。您也可以用下列代码去读写注册表健。set WshShell = CreateObject ("WScript.Shell")WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
    WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"bKey =    WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\")Msgbox (WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\MindReader"))WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
    WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
    WshShell.RegDelete "HKCU\Software\ACME\"详细信息,请访问MSDN网站
    http://msdn.microsoft.com/library/en-us/wsh/htm/wsMthRegRead.asp?frame=true-微软亚洲技术中心 VB开发支持本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款 (http://www.csdn.net/microsoft/terms.shtm)。
      

  10.   

    看看<VB windows API编程>吧,说的又多又清楚!