' 关键是多字符串用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
' 假设对 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
上面的代码需要在窗体上添加三个CommandButton。 :)
字符串连续排列在一起;两个字符串之间以一个 NULL (vbNullChar) 字符分割。
所有字符串最后以两个 NULL 字符结尾。