举个例子
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex:24,00,00,00,73,a0,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\
01,00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00
VBS似乎只能写较短的二进制代码,无法写入较长的。比如
set r=wscript.createobject("wscript.shell")
r.regwrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellState",&H2401aaff,"REG_BINARY"
这段代码可以写入,但是如果在增加的话,就会出现错误。
较长的二进制可通过WMI可以实现,代码如下
'Define constant
Const HKEY_CR = &H80000001 'HKEY_CURRENT_USER常量,具体参看本章最后附录部分
Const REG_BINARY=3 '二进制类型
'string varable
strComputer = "."
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValue = "ShellState"
'binary array
Dim arrData
arrData=Array(&H24,&H00,&H00,&H00,&H73,&Ha0,&H01,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H01, &H00,&H00,&H00,&H0d,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00,&H00)
'registry object
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
'create registry key
objRegistry.CreateKey HKEY_CR, strKeyPath
'setup the binary keyvalue
retcode = objRegistry.SetBinaryValue(HKEY_CR, strKeyPath, strValue, arrData)
'sample error handle
If (retcode = 0) And (Err.Number = 0) Then
WScript.Echo "Binary value added successfully"
Else
' An error occurred
WScript.Echo "An error occurred. Return code: " & retcode
End If
补充一下,使用WMI的StdRegProv类对注册表操作时,需要用到的几个常量
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_DYN_DATA = &H80000006
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7