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("\HKey\KeyTest\", 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
Visual Basic:
-
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
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
Visual Basic:
-
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
Y para obtener el valor usaríamos la función del siguiente modo:
Set oReg = CreateObject("Wscript.Shell")
strClave = oReg.RegRead("HKEY_CLASSES_ROOT\.000HNK\Prueba")
MsgBox stRegBinary(strClave)
Tras buscar información para mi entrada anterior, voy a escribir una breve entrada con lo necesario para poder leer y editar el registro de Windows mediante VBScript.
Los tres objetos que vamos a usar son RegRead, RegWrite y RegDelete.
En relación a la sintaxis a usar para la ruta del registro que queremos modificar tenemos que tener en cuenta:
Podemos abreviar las ramas del registro:
- HKEY_CURRENT_USER > HKCU
- HKEY_LOCAL_MACHINE > HKLM
- HKEY_CLASSES_ROOT > HKCR
- HKEY_USERS > HKCU > HKEY_USERS
- HKEY_CURRENT_CONFIG > HKEY_CURRENT_CONFIG
Dependiendo de si terminamos la ruta con o sin barra invertida "\" estaremos referenciando a la rama (o su valor por defecto) o al nombre de un valor:
- "HKCU\Control Panel\Desktop\" se referirá a la rama "Desktop" o su valor por defecto.
- "HKCU\Control Panel\Desktop\Wallpaper" se referirá al valor de la variable "Wallpaper" dentro de la rama "Desktop"

También conviene repasar los distintos tipos de datos que puede contener el registro:
- REG_SZ: una cadena de tipo String
- REG_DWORD: un valor numérico de tipo entero
- REG_BINARY: un valor de tipo binario
- REG_EXPAND_SZ: una cadena de tipo string
- REG_MULTI_SZ: una matriz de cadenas
Para probar cualquiera de los ejemplos siguientes, puedes crear un nuevo archivo con extensión .vb [p.e: pruebas_registro.vb] y abrirlo con el Bloc de notas para copiar el contenido.
Leer datos del registro:
Vamos a ver un ejemplo para recuperar la ruta de la imagen que tenemos como escritorio:
Visual Basic:
-
'Definimos y creamos el objeto que usaremos para trabajar con el registro:
-
Dim oReg As Object
-
Set oReg = CreateObject("Wscript.Shell")
-
-
'Definimos las variables necesarias
-
Dim strClave As String
-
-
'Guardamos en la variable el valor de la clave
-
strClave = oReg.RegRead("HKCU\Control Panel\Desktop\Wallpaper")
-
-
'Mostramos en un mensaje el valor de la clave
-
MsgBox strClave
-
-
'Destruimos la variable de objeto
-
Set oReg = Nothing
Eliminar datos del registro:
Si quisieramos eliminar esa clave del registro, sería tan sencillo como pasar la ruta completa como parámetro. Te recomiendo hacer una copia de seguridad de la rama del registro en la que vayas a realizar pruebas antes de ponerte a ello.
Visual Basic:
-
'Definimos y creamos el objeto que usaremos para trabajar con el registro:
-
Dim oReg As Object
-
Set oReg = CreateObject("Wscript.Shell")
-
-
'Eliminamos la clave del registro
-
oReg.RegDelete("HKCU\Control Panel\Desktop\Wallpaper")
-
-
'Destruimos la variable de objeto
-
Set oReg = Nothing
Crear y modificar datos del registro:
A la hora de escribir claves en el registro tenemos que tener en cuenta el tipo de dato que vamos a almacenar.
Como ejemplo, cambiaremos la ruta de la imagen del escritorio definida:
Visual Basic:
-
'Definimos y creamos el objeto que usaremos para trabajar con el registro:
-
Dim oReg As Object
-
Set oReg = CreateObject("Wscript.Shell")
-
-
'Definimos las variables necesarias
-
Dim strRuta As String
-
strRuta = "C:\fondo.jpg"
-
-
'Escribimos el nuevo valor de la clave
-
oReg.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", strRuta, "REG_SZ"
-
-
'Destruimos la variable de objeto
-
Set oReg = Nothing
MSDN Library
Editar el Registro de Windows con VBScript - Ejemplos
Tam: 1,1 Kb

Si eres usuario del cliente de correo electrónico de Microsoft, es posible que en alguna ocasión al recibir un correo con un archivo adjunto Outlook te haya bloqueado el acceso al fichero. Esto suele ocurrir cuando te envían archivos con extensiones .exe, .com, etc.
Siguiendo estos pasos podrás definir que extensiones quieres que Outlook no bloquee:
- Salga de Outlook si está en ejecución.
- Haga clic en Inicio y, a continuación, en Ejecutar.
- En el cuadro Abrir, escriba regedit y, después, haga clic en Aceptar.
Compruebe que existe la clave del Registro siguiente para su versión de Outlook. Si existe, vaya al paso 5.
Microsoft Outlook 2000:
HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Outlook\Security
Microsoft Outlook 2002:
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Outlook\Security
Microsoft Office Outlook 2003:
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security
- Si la clave del Registro no existe, créela. Para crear la clave del Registro, busque la siguiente clave del Registro y haga clic en ella: HKEY_CURRENT_USER\Software\Microsoft
- Haga clic en el menú Edición, en Nuevo y, después, en Clave.
- Escriba Office y, a continuación, presione Entrar.
- Haga clic en el menú Edición, en Nuevo y, después, en Clave.
Escriba 11.0 [depedendiendo de la versión de Office instalada] y, a continuación, presione Entrar.
- Haga clic en el menú Edición, en Nuevo y, después, en Clave.
- Escriba Outlook y presione Entrar.
- Haga clic en el menú Edición, en Nuevo y, después, en Clave.
- Escriba Seguridad y, a continuación, presione Entrar.
- Haga clic en el menú Edición, en Nuevo y, después, en Valor de cadena (alfanumérico).
- Escriba el siguiente nombre para el nuevo valor: Level1Remove
- Presione Entrar.
- Haga clic con el botón secundario del ratón en el nombre del nuevo valor y, a continuación, haga clic en Modificar.
- Escriba la extensión de nombre de archivo del tipo de archivo que desea abrir en Outlook. Por ejemplo: .exe
- Si desea especificar varios tipos de archivo, utilice el siguiente formato: .exe;.com
- Haga clic en Aceptar y salga del Registro.
Cuando inicies Outlook, podrás abrir los tipos de archivo que se especificó en el Registro.
[Vía: Soporte Técnico de Microsoft]
La pregunta que me surge es... ¿es que no pueden incluir esto como parte de la parametrización de Outlook, en la preciosa pestaña de Seguridad por ejemplo, que le tienen que decir a un usuario que modifique el registro de Windows?
Para los que quieran comodidad, he montado un pequeño script en VB que pregunta la versión de Office y las extensiones a habilitar:
Desbloquear Adjuntos de Microsoft Outlook
Compatible: Office 2000, 2002 y 2003 Tam: 1,77 KB
Últimamente me viene ocurriendo un problemilla en el portátil de casa: como lo dejo encendido para bajar cosillas de internet, lo que hago es cerrarlo para que la pantalla se apague. Al pasar un tiempo en este estado y volver a abrirlo la imágen de fondo del Windows desaparece y me queda solamente con el color de fondo que tenga el tema aplicado. Lo raro es que en el registro de Windows todavía está la dirección de la imágen a usar como wallpaper. Es un problema del refresco de la pantalla de Windows [como no...]
Me he creado un pequeño script en VB para recargar la imágen de fondo en el registro [por si acaso la elimina] y lanzar la actualización de los parámetros del usuario activo en Windows para que vuelva a tener en cuenta esa imágen.
Visual Basic:
-
Dim WshShell
-
Set WshShell = WScript.CreateObject("Wscript.Shell")
-
-
ConvertedWallpaper = "C:\Documents and Settings\Usuario\Mis documentos\Mis imágenes\Fondo.jpg"
-
Wallpaper = "C:\Documents and Settings\Usuario\Configuración local\Datos de programa\Microsoft\Wallpaper1.bmp"
-
-
WshShell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", Wallpaper
-
WshShell.RegWrite "HKCU\Control Panel\Desktop\ConvertedWallpaper", ConvertedWallpaper
-
WshShell.Run "C:\WINDOWS\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters", 1, False
-
'Wscript.Echo "Proceso finalizado."
-
-
Set WshShell = Nothing
Así, abro una nueva categoría dentro de la de Programación que se dedicará a los scripts en visual basic que encuentre de utilidad.
Si teneis el mismo problema, esto os puede ser de utilidad... siempre es mejor que abrir la ventana de opciones del escritorio y cambiarlo a mano