写入HKEY_LOCAL_MACHINE下名为NAME,值为C2的binary。
写入其它值倒好办,就是C2这个值为"00"

解决方案 »

  1.   

    '给你一个读写注册表的通用例子Option ExplicitGlobal Const REG_SZ As Long = 1
    Global Const REG_DWORD As Long = 4Global Const HKEY_CLASSES_ROOT = &H80000000
    Global Const HKEY_CURRENT_USER = &H80000001
    Global Const HKEY_LOCAL_MACHINE = &H80000002
    Global Const HKEY_USERS = &H80000003Global 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 = 259Global Const KEY_ALL_ACCESS = &H3FGlobal Const REG_OPTION_NON_VOLATILE = 0Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
    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
    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
    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
    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 Long
    Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
    Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
    Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
    Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
    ' Description:
    '   This Function will Delete a key
    '
    ' Syntax:
    '   DeleteKey Location, KeyName
    '
    '   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
    '   , HKEY_USERS
    '
    '   KeyName is name of the key you wish to delete, it may include subkeys (example "Key1\SubKey1")
        Dim lRetVal As Long         'result of the SetValueEx function
        Dim hKey As Long         'handle of open key
        
        'open the specified key
        
        'lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
        lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
        'RegCloseKey (hKey)
    End FunctionPublic Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
    ' Description:
    '   This Function will delete a value
    '
    ' Syntax:
    '   DeleteValue Location, KeyName, ValueName
    '
    '   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
    '   , HKEY_USERS
    '
    '   KeyName is the name of the key that the value you wish to delete is in
    '   , it may include subkeys (example "Key1\SubKey1")
    '
    '   ValueName is the name of value you wish to delete       Dim lRetVal As Long         'result of the SetValueEx function
           Dim hKey As Long         'handle of open key       'open the specified key       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
           lRetVal = RegDeleteValue(hKey, sValueName)
           RegCloseKey (hKey)
    End FunctionPublic Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
        Dim lValue As Long
        Dim sValue As String    Select Case lType
            Case REG_SZ
                sValue = vValue
                SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
            Case REG_DWORD
                lValue = vValue
                SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
            End SelectEnd Function
      

  2.   

    '接上面Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
        Dim cch As Long
        Dim lrc As Long
        Dim lType As Long
        Dim lValue As Long
        Dim sValue As String    On Error GoTo QueryValueExError    ' Determine the size and type of data to be read    lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
        If lrc <> ERROR_NONE Then Error 5    Select Case lType
            ' For strings
            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        ' For DWORDS
            Case REG_DWORD:
                lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
                If lrc = ERROR_NONE Then vValue = lValue
            Case Else
                'all other data types not supported
                lrc = -1
        End SelectQueryValueExExit:    QueryValueEx = lrc
        Exit FunctionQueryValueExError:    Resume QueryValueExExitEnd Function
    Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
    ' Description:
    '   This Function will create a new key
    '
    ' Syntax:
    '   QueryValue Location, KeyName
    '
    '   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
    '   , HKEY_USERS
    '
    '   KeyName is name of the key you wish to create, it may include subkeys (example "Key1\SubKey1")    
        
        Dim hNewKey As Long         'handle to the new key
        Dim lRetVal As Long         'result of the RegCreateKeyEx function
        
        lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
        RegCloseKey (hNewKey)
    End Function
    Sub Main()
        'Examples of each function:
        'CreateNewKey HKEY_CURRENT_USER, "TestKey\SubKey1\SubKey2"
        'SetKeyValue HKEY_CURRENT_USER, "TestKey\SubKey1", "Test", "Testing, Testing", REG_SZ
        'MsgBox QueryValue(HKEY_CURRENT_USER, "TestKey\SubKey1", "Test")
        'DeleteKey HKEY_CURRENT_USER, "TestKey\SubKey1\SubKey2"
        'DeleteValue HKEY_CURRENT_USER, "TestKey\SubKey1", "Test"
    End Sub
    Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
    ' Description:
    '   This Function will set the data field of a value
    '
    ' Syntax:
    '   QueryValue Location, KeyName, ValueName, ValueSetting, ValueType
    '
    '   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
    '   , HKEY_USERS
    '
    '   KeyName is the key that the value is under (example: "Key1\SubKey1")
    '
    '   ValueName is the name of the value you want create, or set the value of (example: "ValueTest")
    '
    '   ValueSetting is what you want the value to equal
    '
    '   ValueType must equal either REG_SZ (a string) Or REG_DWORD (an integer)       Dim lRetVal As Long         'result of the SetValueEx function
           Dim hKey As Long         'handle of open key       'open the specified key       lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
           lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
           RegCloseKey (hKey)End FunctionPublic Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
    ' Description:
    '   This Function will return the data field of a value
    '
    ' Syntax:
    '   Variable = QueryValue(Location, KeyName, ValueName)
    '
    '   Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
    '   , HKEY_USERS
    '
    '   KeyName is the key that the value is under (example: "Software\Microsoft\Windows\CurrentVersion\Explorer")
    '
    '   ValueName is the name of the value you want to access (example: "link")       Dim lRetVal As Long         'result of the API functions
           Dim hKey As Long         'handle of opened key
           Dim vValue As Variant      'setting of queried value
           lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
           lRetVal = QueryValueEx(hKey, sValueName, vValue)
           'MsgBox vValue
           QueryValue = vValue
           RegCloseKey (hKey)
    End Function
      

  3.   

    '别研究了,给你个短一点的
    Option Explicit'---------------------------------------------------------------
    '- 注册表 API 声明...
    '---------------------------------------------------------------
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey 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 String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, 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 RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Private 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 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 RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) 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 RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
    Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
    Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long'---------------------------------------------------------------
    '- 注册表 Api 常数...
    '---------------------------------------------------------------
    ' 注册表数据类型...
    Const REG_SZ = 1                         ' 字符串值
    Const REG_EXPAND_SZ = 2                  ' 可扩充字符串值
    Const REG_BINARY = 3                     ' 二进制值
    Const REG_DWORD = 4                      ' DWORD值
    Const REG_MULTI_SZ = 7                   ' 多字符串值' 注册表创建类型值...
    Const REG_OPTION_NON_VOLATILE = 0        ' 当系统重新启动时,关键字被保留' 注册表关键字安全选项...
    Const READ_CONTROL = &H20000
    Const KEY_QUERY_VALUE = &H1
    Const KEY_SET_VALUE = &H2
    Const KEY_CREATE_SUB_KEY = &H4
    Const KEY_ENUMERATE_SUB_KEYS = &H8
    Const KEY_NOTIFY = &H10
    Const KEY_CREATE_LINK = &H20
    Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
    Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL
    Const KEY_EXECUTE = KEY_READ
    Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
                         
    ' 注册表关键字根类型...
    Const HKEY_CLASSES_ROOT = &H80000000
    Const HKEY_CURRENT_CONFIG = &H80000005
    Const HKEY_CURRENT_USER = &H80000001
    Const HKEY_DYN_DATA = &H80000006
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_PERFORMANCE_DATA = &H80000004
    Const HKEY_USERS = &H80000003' 返回值...
    Const ERROR_NONE = 0
    Const ERROR_BADKEY = 2
    Const ERROR_ACCESS_DENIED = 8
    Const ERROR_SUCCESS = 0'---------------------------------------------------------------
    '- 注册表类型...
    '---------------------------------------------------------------
    Private Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Boolean
    End TypePrivate Type FILETIME
            dwLowDateTime As Long
            dwHighDateTime As Long
    End Type'------------------------------------------------------------------------
    '- 新建注册表关键字并设置注册表关键字的值...
    '- 如果 ValueName 和 Value 都缺省, 则只新建 KeyName 空项, 无子键...
    '- 如果只缺省 ValueName 则将设置指定 KeyName 的默认值
    '------------------------------------------------------------------------
    Public Function SetKey(KeyRoot As Long, KeyName As String, Optional ValueName As String, Optional Value As Variant = "", Optional ValueType As Long = REG_SZ) As Boolean
    Dim REG As Long                                     ' 注册表打开项的句柄
    Dim Success As Boolean                              ' 测试此次操作是否成功
    Dim lpAttr As SECURITY_ATTRIBUTES                   ' 注册表安全类型
    lpAttr.nLength = 50                                 ' 设置安全属性为缺省值...
    lpAttr.lpSecurityDescriptor = 0                     ' ...
    lpAttr.bInheritHandle = True                        ' ...'------------------------------------------------------------
    '- 新建注册表关键字...
    '------------------------------------------------------------
    Success = RegCreateKeyEx(KeyRoot, KeyName, 0, ValueType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, REG, 0)
    If Success <> ERROR_SUCCESS Then GoTo SetKeyError    ' 错误处理'------------------------------------------------------------
    '- 设置注册表关键字的值...
    '------------------------------------------------------------
    If IsMissing(ValueName) = False Then
        Select Case ValueType
            Case REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ
                Success = RegSetValueEx(REG, ValueName, 0, ValueType, ByVal CStr(Value), LenB(StrConv(Value, vbFromUnicode)) + 1)
            Case REG_DWORD
                If CDec(Value) <= 2147483647 And CDec(Value) >= 0 Then
                    Value = Hex(CDec(Value))
                    Value = String(8 - Len(Value), "0") + Value
                    Dim dValue(3) As Byte
                    dValue(0) = Format("&h" + Mid(Value, 7, 2))
                    dValue(1) = Format("&h" + Mid(Value, 5, 2))
                    dValue(2) = Format("&h" + Mid(Value, 3, 2))
                    dValue(3) = Format("&h" + Mid(Value, 1, 2))
                    Success = RegSetValueEx(REG, ValueName, 0, ValueType, dValue(0), 4)
                Else
                    Success = ERROR_BADKEY
                End If
            Case REG_BINARY
                On Error GoTo SetKeyError
                Dim i As Long
                ReDim tmpValue(UBound(Value)) As Byte
                For i = 0 To UBound(tmpValue)
                    tmpValue(i) = Value(i)
                Next i
                Success = RegSetValueEx(REG, ValueName, 0, ValueType, tmpValue(0), UBound(Value) + 1)
        End Select
    End If
    If Success <> ERROR_SUCCESS Then GoTo SetKeyError    ' 错误处理'------------------------------------------------------------
    '- 关闭注册表关键字...
    '------------------------------------------------------------
    RegCloseKey REG
    SetKey = True
    Exit FunctionSetKeyError:
        SetKey = False                                   ' 设置错误返回代码
        RegCloseKey REG                                  ' 关闭注册表关键字
    End Function