将Windows注册表值读入数组

时间:2016-03-31 12:09:39

标签: vbscript windows-7

我必须在VBA中将 Windows注册表值读入数组。值的类型为REG_MULTI_SZ

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
             strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages"
strValueName = "Sources"
Return = objReg.GetMultiStringValue(HKEY_LOCAL_MACHINE, strKeyPath, _
         strValueName, arrValues)
If (Return = 0) And (Err.Number = 0) Then   
    'Treat the multistring value as a collection of strings 
    'separated by spaces and output
    For Each strValue In arrValues
        WScript.Echo  strValue
    Next
Else
    WScript.Echo "GetMultiStringValue failed. Error = " & Err.Number
End If

enter image description here

它给出了数字0的错误,没有描述。任何线索?

2 个答案:

答案 0 :(得分:2)

根据您的屏幕截图,您的密钥是"身份验证包",而不是"来源"。

改变这个:

strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages"
strValueName = "Sources"

进入这个:

strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa"
strValueName = "Authentication Packages"

答案 1 :(得分:0)

这是一个简单的错误。工作代码在这里。

const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa"
strValueName = "Authentication Packages"

Return = objReg.GetMultiStringValue(HKEY_LOCAL_MACHINE,strKeyPath, strValueName,arrValues)
 WScript.Echo  "GetMultiStringValue. Return = " & Return

    If (Return = 0) And (Err.Number = 0) Then   
' Treat the multistring value as a collection of strings 
'    separated by spaces and output
    For Each strValue In arrValues
    WScript.Echo  strValue
Next
Else
    Wscript.Echo "GetMultiStringValue failed. Error = " & Err.Number
End If