近日在研究如何编程修改Windows系统中网络连接的名称,今晚用vbs脚本来测试从注册表中获取网络名称的思路方法,其中有一个注册表数值类型是REG_MULTI_SZ,用CreateObject("Wscript.Shell").RegRead()来读取后,用echo显示其值时总是提示错误:类型不匹配,代码:800A000D,尽管知道REG_MULTI_SZ类型的值是个数组,由于自己一般是用MASM32编程的,对VBScript不是很熟悉,只想到了定义一个数组来接收返回值,这样仍然不能解决问题。
于是用sogou在网上搜索解决方法。结果在中文网页没找到,用英文搜索很顺利就找到了附录参考下面两篇参考文档(如此怎能不怀念Google?),后来根据参考文档1通过wmi解决了问题,但对RegRead()还不死心,继续研究,终于在参考文档2中找到了解决方法。
下面的是分别用RegRead()和wmi两种方法来读取注册表中REG_MULTI_SZ类型数值并显示的演示代码。
'Author:PurpleEndurer ' Date:2016-12-31 ' Dev:Windows XP SP3 set ws = CreateObject("wscript.shell") wscript.echo "1.使用RegRead()读取并显示注册表HKLM\SYSTEM\ControlSet002\Services\Tcpip\Linkage\Route数值" a = ws.RegRead("HKLM\SYSTEM\ControlSet002\Services\Tcpip\Linkage\Route") For Each strValue In a Wscript.Echo strValue Next wscript.echo "2.使用wmi读取并显示注册表HKLM\SYSTEM\ControlSet002\Services\Tcpip\Linkage\Route数值" Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const REG_SZ = 1 Const REG_EXPAND_SZ = 2 Const REG_BINARY = 3 Const REG_DWORD = 4 Const REG_MULTI_SZ = 7 strComputer = "." 'Use . for current machine Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") hDefKey = HKEY_LOCAL_MACHINE strSubKeyPath = "SYSTEM\ControlSet002\Services\Tcpip\Linkage" strValueName = "Route" oReg.GetMultiStringValue hDefKey, strSubKeyPath, strValueName, arrValues For Each strValue in arrValues wscript.echo strValue Next wscript.quit