怎样操作注册表中的REG_MULTI_SZ型的数据啊包括写,读,和删除

解决方案 »

  1.   

    ' 关键是多字符串用chr(0)分隔
    ' 假设对 HKEY_CURRENT_USER\lpp 下的多字符串值 abc 进行操作Option Explicit
    Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) 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         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    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         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Private Const HKEY_CURRENT_USER = &H80000001
    Private Const REG_MULTI_SZ = 7                   ' Multiple Unicode stringsPrivate Sub Command1_Click()
    Dim reg As Long
    Dim strData As String, lstrData As Long
    strData = "abc" & Chr(0) & "def" & Chr(0) & "ghi"
    lstrData = LenB(StrConv(strData, vbFromUnicode)) + 1
    RegCreateKey HKEY_CURRENT_USER, "lpp", reg
    RegSetValueEx reg, "abc", 0, REG_MULTI_SZ, ByVal strData, lstrData
    End SubPrivate Sub Command2_Click()
    Dim reg As Long
    Dim strData As String, lstrData As Long
    strData = Space(255)
    lstrData = 256
    RegOpenKey HKEY_CURRENT_USER, "lpp", reg
    RegQueryValueEx reg, "abc", 0, REG_MULTI_SZ, ByVal strData, lstrData
    Debug.Print Left(strData, lstrData)
    MsgBox Replace(Left(strData, lstrData), Chr(0), vbCrLf)
    End SubPrivate Sub Command3_Click()
    Dim reg As Long
    Dim strData As String, lstrData As Long
    RegOpenKey HKEY_CURRENT_USER, "lpp", reg
    RegDeleteValue reg, "abc"
    End SubPrivate Sub Form_Load()
    Command1.Caption = "写"
    Command2.Caption = "读"
    Command3.Caption = "删"
    End Sub
      

  2.   

    补充一下:
    上面的代码需要在窗体上添加三个CommandButton。    :)
      

  3.   

    和一般的字符串差不多。
    字符串连续排列在一起;两个字符串之间以一个 NULL (vbNullChar) 字符分割。
    所有字符串最后以两个 NULL 字符结尾。