在 VB 中只能使用 API 函数来解决。

解决方案 »

  1.   

    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
      

  2.   

    这是老问题了,
    Public Const REG_DWORD = 4
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const ERROR_SUCCESS = 0&
    Private Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
    Private Declare Function RegCreateKey Lib "advapi32" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Any, lpcbData As Long) As Long
    '说  明: 写入注册表键值
    '输  入: strName -- 键名;strValue -- 键值
    '返回值: 成功 -- TRUE;失败 -- FALSEPublic Function WriteReg(ByRef strSubKey As String, ByRef strName As String, ByRef strValue As String) As Boolean
    Dim lngReturn As Long    '返回值
    Dim lngReserved As Long  '保留值
    Dim subHKey As Long '键值指针
    WriteReg = False
    lngReturn = RegCreateKey(HKEY_LOCAL_MACHINE, strSubKey, subHKey)
    If lngReturn <> ERROR_SUCCESS Then Exit Function
    lngReturn = 0
    lngReturn = RegSetValueEx(subHKey, strName, lngReserved, REG_SZ, strValue, Len(strValue))
    If lngReturn <> ERROR_SUCCESS Then Exit Function
    lngReturn = RegCloseKey(subHKey)
    WriteReg = True
    End Function'说  明: 查注册表键值
    '输  入: strName  -- 键名
    '返回值: 键值Public Function GetRegValue(ByRef strSubKey As String, ByRef strName As String) As String
    Dim lngReturn As Long    '返回值
    Dim lngReserved As Long  '保留值
    Dim subHKey As Long '键值指针
    Dim strValue As String
    Dim intPst As Integer
    strValue = Space(254)
    lngReturn = RegCreateKey(HKEY_LOCAL_MACHINE, strSubKey, subHKey)
    If lngReturn <> ERROR_SUCCESS Then Exit Function
    lngReturn = RegQueryValueEx(subHKey, strName, lngReserved, REG_SZ, strValue, 254)
    If lngReturn <> ERROR_SUCCESS Then Exit Function
    lngReturn = RegCloseKey(subHKey)
    GetRegValue = Trim(strValue)
    intPst = InStr(GetRegValue, Chr(0))
    If intPst > 0 Then GetRegValue = Left(GetRegValue, intPst - 1)
    End Function
      

  3.   

    我上面的例子是写入reg_sz(字符串)的,你要写reg_dword的话做一下相应修改就行
      

  4.   

    写入reg_sz字符串我懂,但是写入reg_dword查看注册表说是无效DWORD值.
       不知怎么办
      

  5.   


    看这个例子:
    http://www.csdn.net/dev/Visual%20Basic/source%20code/System%20Related/里的:
    Registry.zip文件
      

  6.   

    API:regopenkey 
    API:regsetvalueex
      

  7.   

    '***************************
    '注册表操作函数用.
    Const SYNCHRONIZE = &H100000
    Const READ_CONTROL = &H20000
    Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
    Const STANDARD_RIGHTS_ALL = &H1F0000Const KEY_QUERY_VALUE = &H1
    Const KEY_ENUMERATE_SUB_KEYS = &H8
    Const KEY_NOTIFY = &H10
    Const KEY_SET_VALUE = &H2
    Const KEY_CREATE_SUB_KEY = &H4
    Const KEY_READ = ((READ_CONTROL Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
    Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))Const ERROR_SUCCESS = 0&Const REG_SZ = 1
    Const REG_BINARY = 3
    Const REG_DWORD = 4Const HKEY_CLASSES_ROOT = &H80000000
    Const HKEY_CURRENT_USER = &H80000001
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_USERS = &H80000003
    Const HKEY_PERFORMANCE_DATA = &H80000004
    Const HKEY_CURRENT_CONFIG = &H80000005
    Const HKEY_DYN_DATA = &H80000006Const REG_CREATED_NEW_KEY = &H1
    Const REG_OPENED_EXISTING_KEY = &H2Private 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 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 RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As Long, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition 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 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 RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long'****************************
    '****************************************************
    '注册表操作函数
    Public Function CheckRegistryKey(ByVal hKey As Long, ByVal KeyName As String) As Boolean
    Dim handle As Long
        If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) = 0 Then
            CheckRegistryKey = True
            RegCloseKey handle
        End If
    End Function
    Public Function GetRegistryValue(ByVal hKey As Long, ByVal KeyName As String, _
        ByVal ValueName As String, ByVal KeyType As Integer, _
        Optional DefaultValue As String = "") As String    Dim handle As Long, resLong As Long
        Dim resString As String, Length As Long
        Dim resBinary() As Byte
        
        GetRegistryValue = DefaultValue
        If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) Then Exit Function
        
        Select Case KeyType
            Case REG_DWORD
                If RegQueryValueEx(handle, ValueName, 0, REG_DWORD, _
                    resLong, 4) = 0 Then
                    GetRegistryValue = Trim(CStr(resLong))
                End If
            Case REG_SZ
                Length = 1024: resString = Space$(Length)
                If RegQueryValueEx(handle, ValueName, 0, REG_SZ, _
                    ByVal resString, Length) = 0 Then
                    GetRegistryValue = Left$(resString, Length)
                End If
            Case REG_BINARY
                Length = 4096
                ReDim resBinary(Length - 1) As Byte
                If RegQueryValueEx(handle, ValueName, 0, REG_BINARY, _
                    resBinary(0), Length) = 0 Then
                    ReDim Preserve resBinary(Length - 1) As Byte
                    Dim i As Long
                    For i = 0 To Length - 2
                        GetRegistryValue = GetRegistryValue & Trim(CStr(resBinary(i)))
                    Next
                End If
            Case Else
                Err.Raise 1001, , "Unsupported value type"
        End Select
        
        RegCloseKey handle
    End FunctionPublic Sub SetRegistryValue(ByVal hKey As Long, ByVal KeyName As String, ByVal ValueName As String, ByVal KeyType As Integer, value As String)
        Dim handle As Long, lngValue As Long
        Dim strValue As String
        Dim binValue() As Byte, Length As Long
        
        If RegOpenKeyEx(hKey, KeyName, 0, KEY_WRITE, handle) Then Exit Sub
        
        Select Case KeyType
            Case REG_DWORD
                lngValue = Val(value)
                RegSetValueEx handle, ValueName, 0, KeyType, lngValue, 4
            Case REG_SZ
                strValue = value
                RegSetValueEx handle, ValueName, 0, KeyType, ByVal strValue, LenEx(strValue)
            Case REG_BINARY
                Length = LenEx(Trim(value))
                Dim i As Long
                ReDim binValue(Length - 1)
                For i = 0 To Length - 1
                    binValue(i) = Val(Mid(value, i + 1, 1))
                Next
                Length = UBound(binValue) - LBound(binValue) + 1
                RegSetValueEx handle, ValueName, 0, KeyType, binValue(LBound(binValue)), Length
        End Select
        
        RegCloseKey handle
    End Sub
    Public Function DeleteRegistryValue(ByVal hKey As Long, ByVal KeyName As String, ByVal lpValueName As String) As Long
        Dim handle As Long
          
        If RegOpenKeyEx(hKey, KeyName, 0, KEY_WRITE, handle) Then Exit Function
        
        RegDeleteValue handle, lpValueName
          
        RegCloseKey handle
    End Function
    Public Function CreateRegistryKey(ByVal hKey As Long, ByVal KeyName As String) As Long
        Dim handle As Long, disp As Long
        If RegCreateKeyEx(hKey, KeyName, 0, 0, 0, 0, 0, handle, disp) Then
            CreateRegistryKey = 1
        Else
            If disp = REG_OPENED_EXISTING_KEY Then CreateRegistryKey = 0
            RegCloseKey handle
        End If
    End FunctionPublic Function DeleteRegistryKey(ByVal hKey As Long, ByVal KeyName As String) As Long
        If RegDeleteKey(hKey, KeyName) Then
            DeleteRegistryKey = 1
        Else
            DeleteRegistryKey = 0
        End If
    End Function
      

  8.   

    要完成Value的写入,需要用到API函数RegSetValueEx。下面是它的一些说明。
    VB声明
    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
    参数:
    hKey:Key Handle
    lpValueName:Value名称
    Reserved:保留参数,具体使用时置为0即可
    dwType:数据类型
    lpData:所设置的数据,注意这一参数被定义成lpData As Any,所以要传入字符串数据时别忘了在参数前加保留字ByVal
    cbData:数据的长度。注意:如果写入的数据属于REG_SZ、REG_EXPAND_SZ、REG_MULTI_SZ类型时,则这个长度应该包含chr(0)字符。
    返回值: =0,表示成功;≠0,表示失败Dim L As Long 
    L = 99999 
    RegSetValueEx hKey, "LongData", 0, REG_DWORD, L, 4