Vbscript 通过VBScirpt获取注册表项的十六进制值
认为这是我在注册表中的目标项:Vbscript 通过VBScirpt获取注册表项的十六进制值,vbscript,registry,Vbscript,Registry,认为这是我在注册表中的目标项: [HKEY_CURRENT_USER\System\Majid\0] "GUID"=hex:60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00 正如您所看到的,GUID有一个十六进制值,我想告诉vb脚本转到这个键,并将其十六进制数据存储到一个变量中 例如,如果目标变量为“target”,则其值应为“60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00” 任何帮助都是值得感激的很
[HKEY_CURRENT_USER\System\Majid\0]
"GUID"=hex:60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00
正如您所看到的,GUID有一个十六进制值,我想告诉vb脚本转到这个键,并将其十六进制数据存储到一个变量中
例如,如果目标变量为“target”,则其值应为“60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00”
任何帮助都是值得感激的很可能你还没有答案的原因是,你的问题的前提即使没有缺陷,也是误导性的。这个问题似乎暗示你在问一个十六进制数,但实际上你在问二进制数据。当您从注册表导出二进制值时,生成的.reg文件将按照您的示例以十六进制对该值进行编码。你可能意识到这一点,也可能没有意识到,但这很可能是解决问题的绊脚石 现在我来回答“如何将二进制值转换为十六进制字符串表示?” 下面的代码为我完成了这项工作。我只是偶尔使用vbscript,所以请原谅我的草率
Dim objRegistry, target, output
Set objRegistry = CreateObject("Wscript.shell")
target = objRegistry.RegRead("HKCU\System\Majid\0\GUID")
output = ""
for k = LBound(target,1) To UBound(target,1)
output = output & hex(target(k)) & ","
next
WScript.echo output
这对你有用吗?今天写了这些。我仍然需要找出“,\”在代码中的位置,但这一个将获取一个REG\u MULTI\u SZ值,并将其转换为正确的十六进制结果,如.REG文件所示
'##### READ A REG_MULTI_SZ VALUE CONVERT TO HEX #####
strComputer = "."
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Dim oShell
Set oShell = WScript.CreateObject("Wscript.Shell")
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
regHive = "HKLM"
regKey = "Software\template\templateL2"
regValueName = "SAMPLE-Multi_String"
regPath = regHive & "\" & regKey & "\" & regValueName
regValue = oShell.RegRead(regPath)
res = ""
prefix = "hex(7):"
For Each item In regValue
data = data & item & vbcrlf
For i=1 To Len(item)
r = HexIt(Mid(item,i,1))
res = res & r
Next
res = res & "00,00," 'NEW LINE / ENTRY
Next
res = res & "00,00" 'FINAL COMPLETION
'CONVERT EACH CHARACTER TO ASCII THEN TO HEX, ADD ",00," BETWEEN EACH VALUE
Function HexIt(data)
a = Asc(data)
h = Hex(a)
HexIt = h & ",00,"
End Function
WScript.Echo "ACTUAL DATA IN GUI : " & vbCrLf & data & vbCrLf
WScript.Echo "HEX REPRESENTATION : " & vbCrLf & res & vbCrLf
WScript.Echo "REG FILE VALUE : " & vbCrLf & prefix & res & vbCrLf
这是给德沃德的
'##### READ A DWORD VALUE CONVERT TO HEX #####
strComputer = "."
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Dim oShell
Set oShell = WScript.CreateObject("Wscript.Shell")
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
regHive = "HKLM"
regKey = "Software\template\templateL2"
regValueName = "SAMPLE-Dword"
regPath = regHive & "\" & regKey & "\" & regValueName
regValue = oShell.RegRead(regPath) 'SPECIFY YOUR HIVE\KEY\VALUE HERE
res = ""
If Len(regvalue) Mod 2 = 0 Then
res = "0x"
leading0 = ""
Else
res = "0x0"
leading0 = "0"
End If
WScript.Echo "INPUT DATA IN GUI : " & Hex(regValue)
WScript.Echo "HEX REPRESENTATION: " & res & Hex(regvalue)
WScript.Echo "REG FILE VALUE : " & "dword:" & leading0 & Hex(regvalue)
REG_扩展_SZ一个
'############# READ REG_EXPAND_SZ ##########
strComputer = "."
Dim fso
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Dim oShell
Set oShell = WScript.CreateObject("Wscript.Shell")
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
regHive = "HKLM"
regKey = "Software\template\templateL2"
regValueName = "Expandable_String"
regPath = regHive & "\" & regKey & "\" & regValueName
regValue = oShell.RegRead(regPath)
res = ""
prefix = "hex(2):"
For i=1 To Len(regValue)
r = HexIt(Mid(regValue,i,1))
res = res & r
Next
res = res & "00,00" 'NEW LINE / ENTRY
WScript.Echo "INPUT DATA IN GUI : " & regValue
WScript.Echo "HEX REPRESENTATION: " & res
WScript.Echo "REG FILE VALUE : " & prefix & res
'CONVERT EACH CHARACTER TO ASCII THEN TO HEX, ADD ",00," BETWEEN EACH VALUE
Function HexIt(data)
a = Asc(data)
h = Hex(a)
HexIt = h & ",00,"
End Function
嗨,jqcAngel,是的,它很有效,谢谢你的帮助。干得好。但我有一个很小的问题,认为十六进制数据是“60,de,2a,56,51,b2,e0,11,80,01,44,45,53,54,00,00”,这个脚本将放一个“,”在最后,在最后一个00之后我们有一个“,”。如何修复它?还有什么方法可以用小写而不是大写来显示字母呢?嗨,jqcAngel,另一个小问题,正如你在我的例子中看到的,两个最新的十六进制值是两个零“00”,但是你的脚本只显示一个零,类似这样:53,54,0,0。如果你不愿意调整我的示例来实现你的目标,为什么还要使用vbscript呢?将以下内容放在文件的顶部:
Function PadDigits(n,totalDigits)PadDigits=Right(String(totalDigits,“0”)&n,totalDigits)End Function
然后将输出赋值行更改为:output=output&PadDigits(0,hex(target(k))`PS,在执行回显之前,只需从字符串中删除最后一个字符。这里有一个链接,提供了有关vbscript所有文本格式功能的信息。您好,我已经用您的指南编辑了代码,但是我会遇到以下错误:“类型不匹配:'totalDigits'),那么我该怎么办?