用api函数修改注册表,reg_sz和string应该是一致的吧?
怎么在vb中编的是字符串,修改注册表看到的是乱码?

解决方案 »

  1.   

    试试这个Public Enum EnumRegistryValue
        REG_SZ = 1          '字符串
        REG_DWORD = 4       '双字节
        REG_BINARY = 3      '二进制
    End EnumPublic Enum EnumRegistryKey
        HKEY_CLASSES_ROOT = &H80000000
        HKEY_CURRENT_USER = &H80000001
        HKEY_LOCAL_MACHINE = &H80000002
        HKEY_USERS = &H80000003
    End Enum
    Function SetValue(RootKey As EnumRegistryKey, SubKey As String, Name As String, fbType As EnumRegistryValue, Value As Variant) As Long
    '设置值
    On Error GoTo er
    Dim i As Integer, tmp As String, l As Integer
    l = RegOpenKeyEx(RootKey, SubKey, 0, &H3F, R)
    If l <> 0 Then GoTo er
    Select Case fbType
    Case REG_DWORD
        SetValue = RegSetValueEx(R, Name, 0&, 4, CLng(Value), 4)
    Case REG_SZ
        l = 0
        For i = 1 To Len(Value)
            If Asc(Mid(Value, i, 1)) < 0 Then
                l = l + 2
            Else
                l = l + 1
            End If
        Next i
        SetValue = RegSetValueEx(R, Name, 0&, 1, ByVal CStr(Value), l)
    Case REG_BINARY
        SetValue = RegSetValueEx(R, Name, 0&, 3, ByVal CStr(Value), Len(CStr(Value)))
    Case Else
        SetValue = -1
    End Select
    RegCloseKey R
    Exit Function
    er:
    SetValue = -1
    RegCloseKey R
    End Function
      

  2.   

    1.你API的声明贴出来看看
    2.我怎么记得好象应该
    REG_SZ = 2
      

  3.   

    你加上Value=Value & chr(0)
      

  4.   

    把源代码贴出来
    Private Sub Form_Load()
    Dim retvalue As Long
    Dim result As Long
    Dim keyValue As String
    Dim keyvaluei As String
    Dim keyld As Long
    Dim subkey As String
    Dim bufsize As Long
    Dim reg_sz As Long
    Dim buf As String
    retvalue = RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", keyld)
    If retvalue = 0 Then
       keyValue = "202.112.192.1:80"
       Form1.Caption = keyld
       keyvaluei = "HH:mm:ss tt"
       subkey = "ProxyServer"
       retvalue = RegQueryValueEx(keyld, subkey, 0, reg_sz, 0, bufsize)
       Text1.Text = retvalue
       'retvalue = RegSetValue(keyld, subkey, reg_sz, keyValue, Len(keyValue) + 1)
       retvalue = RegSetValueEx(keyld, subkey, 0, reg_sz, keyValue, Len(keyValue) + 1)
       Text2.Text = retvalue
    Else
       Form1.Caption = "hehe"
    End If
    End Sub
      

  5.   

    而且keyValue改成String * xx类型的比较好,不然,用二进制数组代替也行,代替的时候不用太麻烦:
    dim a() as byte 
    a=字符串
    RegSetValueEx(x,x,x,a,x)
    就行了
      

  6.   

    Public Property Let Str(ByVal hKey As Long, ByRef ValueName As String, Optional ByRef RegType As Long = REG_SZ, RHS As String)
        Call RegSetValueEx(hKey, ByVal ValueName, 0, RegType, ByVal RHS, LenB(StrConv(RHS, vbFromUnicode)) + 1)
    End Property
      

  7.   

    VB操作注册表
    http://www.sqreg.com/list.asp?id=243
    http://www.sqreg.com/list.asp?id=244
    http://www.sqreg.com/list.asp?id=245
    http://www.sqreg.com/list.asp?id=246
    http://www.sqreg.com/list.asp?id=247
    http://www.sqreg.com/list.asp?id=248
    http://www.sqreg.com/list.asp?id=249
    http://www.sqreg.com/list.asp?id=250
    http://www.sqreg.com/list.asp?id=251