Получить шестнадцатеричное значение ключа реестра через VBScirpt - PullRequest
0 голосов
/ 19 сентября 2011

Думаю, это мой целевой ключ в реестре:

[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»

Любая помощь действительно ценится

Ответы [ 4 ]

2 голосов
/ 21 сентября 2011

Вероятно, причина того, что у вас еще нет ответа, заключается в том, что предпосылка вашего вопроса вводит в заблуждение, если не ошибается.Кажется, вопрос подразумевает, что вы спрашиваете о шестнадцатеричном числе, но на самом деле вы спрашиваете о двоичных данных.Когда вы экспортируете двоичное значение из реестра, результирующий файл .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

Это работает для вас?

0 голосов
/ 10 января 2014

Один для REG_EXPAND_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
0 голосов
/ 10 января 2014

Вот один для DWORD

'##### 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)
0 голосов
/ 10 января 2014

написал это сегодня. Мне все еще нужно выяснить, где в коде находится символ «, \», но он примет значение REG_MULTI_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 
...