Escribir Tipos Binarios en el Registro

21 enero, 2008

Después del comentario de Jack en mi última entrada sobre la lectura/escritura del registro de Windows usando VBScript, me puse a investigar como se podían introducir valores binarios en una clave.

Si tuvieramos que introducir un valor binario con formato corto usaríamos simplemente la instrucción RegWrite:

WSHShell.RegWrite("HKeyKeyTest", 0x1, "REG BINARY")

Pero, tras consultar unas cuantas páginas especializadas, he descubierto que no existe una forma automática de realizar este proceso para valores con formato largo [p.e: 00 00 10 01]. La única solución posible que tenemos que usar se basa en generar una archivo temporal con la información a grabar e importarlo en el registro [sí, es muy cutre].

Os presento las funciones necesarias para escribir y leer valores binarios en las claves del registro de Windows:

Procedimiento para Escribir en el Registro un Valor Binario
[vb]
Sub RegBinWrite (key, value, data)

Dim st_TEMPFILE
st_TEMPFILE = “wBin.reg”

Dim oFS
Dim txtStream
Dim WshShell
Dim valString

key = “[” & key & “]”

If value <> “@” then
value = chr(34) & value & chr(34)
End if

valString = value & “=” & data

Set oFS = CreateObject(“Scripting.FileSystemObject”)
Set txtStream = oFS.CreateTextFile(st_TEMPFILE,True)
txtStream.WriteLine(“REGEDIT4”)
txtStream.WriteLine(key)
txtStream.WriteLine(valString)
txtStream.Close

Set WshShell = CreateObject(“Wscript.Shell”)
WshShell.Run “regedit /s ” & st_TEMPFILE, 1, True
Set WshShell = Nothing

oFS.DeleteFile st_TEMPFILE
Set oFS = Nothing

End Sub
[/vb]

Para realizar el proceso haríamos una llamada tal que así:

RegBinWrite "HKEY_CLASSES_ROOT.000HNK", "Prueba", "hex:00,00,01,00"

Y si quisieramos que la clave binaria sea la predeterminada, usaríamos el caracter @:

RegBinWrite "HKEY_CLASSES_ROOT.000HNK", "@", "hex:00,00,01,00"

Función para Leer un Valor Binario del Registro
[vb]
Function stRegBinary (RegBinaryArray)

Dim item, st

If Not isarray(RegBinaryArray) Then
stRegBinary = “”
Else
For Each item In RegBinaryArray
st= st & CStr(Right(“00″ & HEX(item),2)) & ” ”
Next
stRegBinary = Trim(st)
End If

End Function
[/vb]

Y para obtener el valor usaríamos la función del siguiente modo:
Set oReg = CreateObject("Wscript.Shell")
strClave = oReg.RegRead("HKEY_CLASSES_ROOT.000HNKPrueba")
MsgBox stRegBinary(strClave)

  • Mijail

    busque esto em todo sitio lo encontre aqui muchas graciasss!!

  • Xibor

    Gracias!!! capo!!!tanto tiempo.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.