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'),那么我该怎么办?