• Últimos Comentarios
  • Entradas Aleatorias
  • Lo Más Popular

Olivetti

0 comentarios | La maquina de escribir con la que mi padre comenzo a mecanografiar. ...

Skype 3.0

0 comentarios | Ya ha salido la version 3.0 de Skype, con bastantes novedades como la posibilidad de jugar con un contacto, crear '...

Las primeras fans de mi web...

Smilies Themer

1 comentario  | Rick ha creado un estupendo plugin para Wordpress con el que podras seleccionar de una forma sencilla el tema visua...

21/01Escribir Tipos Binarios en el Registro

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:
  1. Sub RegBinWrite (key, value, data)
  2.  
  3.   Dim st_TEMPFILE
  4.   st_TEMPFILE = “wBin.reg”
  5.  
  6.   Dim oFS
  7.   Dim txtStream
  8.   Dim WshShell
  9.   Dim valString
  10.  
  11.   key = ”[“ & key & ”]”
  12.  
  13.   If value <> ”@” then
  14.     value = chr(34) & value & chr(34)
  15.   End if
  16.  
  17.   valString = value & ”=” & data
  18.  
  19.   Set oFS = CreateObject(“Scripting.FileSystemObject”)
  20.   Set txtStream = oFS.CreateTextFile(st_TEMPFILE,True)
  21.   txtStream.WriteLine(“REGEDIT4”)
  22.   txtStream.WriteLine(key)
  23.   txtStream.WriteLine(valString)
  24.   txtStream.Close
  25.  
  26.   Set WshShell = CreateObject(“Wscript.Shell”)
  27.   WshShell.Run “regedit /s “ & st_TEMPFILE, 1, True
  28.   Set WshShell = Nothing
  29.  
  30.   oFS.DeleteFile st_TEMPFILE
  31.   Set oFS = Nothing
  32.  
  33. 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:
  1. Function stRegBinary (RegBinaryArray)
  2.  
  3.   Dim item, st
  4.  
  5.   If Not isarray(RegBinaryArray) Then
  6.     stRegBinary = ””
  7.   Else
  8.     For Each item In RegBinaryArray
  9.       st= st & CStr(Right(“00” & HEX(item),2)) & ” “
  10.     Next
  11.     stRegBinary = Trim(st)
  12.   End If
  13.  
  14. 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)

24/12Editar el Registro con VBScript

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”

Registro de Windows

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:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Definimos las variables necesarias
  6. Dim strClave As String
  7.  
  8. ‘Guardamos en la variable el valor de la clave
  9. strClave = oReg.RegRead(“HKCU\Control Panel\Desktop\Wallpaper”)
  10.  
  11. ‘Mostramos en un mensaje el valor de la clave
  12. MsgBox strClave
  13.  
  14. ‘Destruimos la variable de objeto
  15. 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:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Eliminamos la clave del registro
  6. oReg.RegDelete(“HKCU\Control Panel\Desktop\Wallpaper”)
  7.  
  8. ‘Destruimos la variable de objeto
  9. 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:
  1. ‘Definimos y creamos el objeto que usaremos para trabajar con el registro:
  2. Dim oReg As Object
  3. Set oReg = CreateObject(“Wscript.Shell”)
  4.  
  5. ‘Definimos las variables necesarias
  6. Dim strRuta As String
  7. strRuta = “C:\fondo.jpg”
  8.  
  9. ‘Escribimos el nuevo valor de la clave
  10. oReg.RegWrite “HKCU\Control Panel\Desktop\Wallpaper”, strRuta, “REG_SZ”
  11.  
  12. ‘Destruimos la variable de objeto
  13. Set oReg = Nothing

Editar el Registro de Windows con VBScript - Ejemplos
Tam: 1,1 Kb

28/07Copiar y Mover a… en el Menú Contextual

Con los siguientes archivos podrás disponer de las acciones “Copiar a…” y “Mover a…” en el menú contextual que aparece al pulsar con el botón derecho del ratón sobre un fichero o carpeta.

Copiar y Mover a...

Solo tienes que descargar el archivo, descomprimirlo y hacer doble click en los archivos de registro, aceptando el mensaje de confirmación. [Probado en Windows XP]

Copiar y Mover a… en Menú Contextual
Ver: 1.0     Tam: 620 Bytes