Lo de usar datos binários para agregar una clave binária tiene sentido, pero que me digan que desde Batch con el comando "Reg.exe" lo puedes hacer usando como valor un string y sin ningún esfuerzo por parte del usuario/scripter, y en cambio en .NET haya que hacer todo el proceso manual y estríctamente y encima séa necesario conocer las bases principales de los bytes y el binário para poder convertir el string a sus respectivos valores de bytes y para así luego poder agregar la maldita clave... en fín! esto para mi ha sido desesperante. Este trozo de código si que lo copio y sin haber aprendido nada, porque me ha quemado del todo.
PD: ¿Alguien que entienda de arrays de bytes y todo esto me puede decir si el code está bien?, es que tuve que restarle "-1" al "data.length" (en lugar de restarle "-3" como pone en el código original) para que me funcionase corréctamente.
Solución:
Código
Dim data As String = "000a42494c4c2047415445535ad50adc4f5ca6f9efc1252aadf9847f" Dim bytes((data.Length \ 2) - 1) As Byte For i As Integer = 0 To data.Length - 1 Step 2 Dim hexByte As String = data.Substring(i, 2) Dim value As Byte = Byte.Parse(hexByte, Globalization.NumberStyles.AllowHexSpecifier) bytes(i \ 2) = value Next My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\PowerISO", "USER", bytes, Microsoft.Win32.RegistryValueKind.Binary)
http://www.dreamincode.net/forums/topic/138591-write-reg-binary-hex-to-the-registry/
Saludos.
EDITO: ya he solucionado uno de los problemas, en la función asumo que el parámetro es de tipo string y por eso el array de bytes no me tiraba ni patrás.
Ahora sólo necesito que alguien me ayude a convertir este valor hexadecimal a bytes para poder añadir la clave...
Código:
000a42494c4c2047415445535ad50adc4f5ca6f9efc1252aadf9847f
no sé como hacerlo sincéramente, he usado 3 convertidores online HEX a BIN pero no creo que eso me sirva, algo estaré haciendo mal porque esto no me funciona:
PD: los ceros sueltos ("0,0") no los puse yo a propósito, la IDE me lo convierte en ceros sueltos y "1" unos sueltos...
Código
Dim BinaryData As Byte() = {11, 11, 10, 1, 11, 10, 11, 11, 11, 0, 0, 1, 0, 10, 1, 1, 0, 10, 10, 10, 10, 10, 11, 1, 11, 11, 10, 0, 0, 0, 0, 0, 0, 0} My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\PowerISO", "USER", BinaryData, Microsoft.Win32.RegistryValueKind.Binary)
Necesito que el contenido de la clave quede como en este ejemplo:
¿Como narices se convierte ese valor?
Hola,
Hace tiempo una función para agregar claves al registro, pero ahora me he dado cuenta de que no funciona con claves binárias, y necesita agregar una.
Código
Public Function Reg_Set_Value(ByVal RegKey As String, ByVal RegValue As String, ByVal RegData As String, ByVal RegDataType As Microsoft.Win32.RegistryValueKind) As Boolean Try My.Computer.Registry.SetValue(RegKey, RegValue, RegData, RegDataType) Return True Catch ex As Exception Throw New Exception(ex.Message) End Try End Function
Código
Reg_Set_Value("HKEY_CURRENT_USER\Software\PowerISO", "USER", "000a42494c4c2047415445535ad50adc4f5ca6f9efc1252aadf9847f", Microsoft.Win32.RegistryValueKind.Binary)
También he intentado creando un array de Bytes (no sé si será una estupidez...) pero aparte de que no se si he hecho corréctamente la conversión del string a binário, no sé utilizar los bytes para esto:
Código
Dim val() As Byte = {0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 0, 0, 0, 1, 8} Reg_Set_Value("HKEY_CURRENT_USER\Software\PowerISO", "USER", val(), Microsoft.Win32.RegistryValueKind.Binary)
Así es como puedo crear la clave que necesito usando un script de Regedit:
Código:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\PowerISO]
"USER"=hex:00,0a,42,49,4c,4c,20,47,41,54,45,53,5a,d5,0a,dc,4f,5c,a6,f9,ef,c1,\
25,2a,ad,f9,84,7f
Y así como lo puedo hacer en Batch:
Código
REG ADD "HKCU\Software\PowerISO" /V "USER" /T "REG_BINARY" /D 000a42494c4c2047415445535ad50adc4f5ca6f9efc1252aadf9847f /F
Ni eso ni Google me han servido para saber que estoy haciendo mal.
¿Alguna información please?
Un saludo.