Editar el Registro con VBScript

24 diciembre, 2007

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:

  • “HKCUControl PanelDesktop” se referirá a la rama “Desktop” o su valor por defecto.
  • “HKCUControl PanelDesktopWallpaper” 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:
[vb]
‘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(“HKCUControl PanelDesktopWallpaper”)

‘Mostramos en un mensaje el valor de la clave
MsgBox strClave

‘Destruimos la variable de objeto
Set oReg = Nothing
[/vb]

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.
[vb]
‘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(“HKCUControl PanelDesktopWallpaper”)

‘Destruimos la variable de objeto
Set oReg = Nothing
[/vb]

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:
[vb]
‘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 “HKCUControl PanelDesktopWallpaper”, strRuta, “REG_SZ”

‘Destruimos la variable de objeto
Set oReg = Nothing
[/vb]

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

  • jack

    y como puedo introducir un valor binario (ejemp: “00 00 00 00” en una clave del registro del tipo: Reg_Binary ?

  • Pingback: Escribir Tipos Binarios en el Registro con VB | HNKweb()

  • @jack: en esta entrada te resuelvo la duda. saludos!

  • Lucas

    Hola HNK, no tengo idea de VB, me podrias decir como podria poner uno de estos codigos en un archivo vbs para que funcione, o con que hacerlo?

    Muchas gracias

  • @Lucas: he actualizado la entrada añadiendo un archivo comprimido con los tres ejemplos en ficheros VBS separados. Para editarlos basta con usar el Bloc de Notas.
    Saludos.

  • Lucas

    @hanok: Gracias. Pero sigue sin funcionarme, ya ves que no tengo mucha idea. Creia que iba a funcionar directamente como otros archivos vbs.

  • Quinhack_

    mi interes es lograr cambiar el nombre de MIPC por medio de un vbs, para esto una de las formas es, entrar a la claver;”@D:WINDOWSsystem32netshell.dll,-1200″ , ubicada en HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellNoRoamMUICache.. osa que teoricamente si coloco este codigo en un vbs:
    Dim WSHShell
    Set WSHShell = CreateObject(“WScript.Shell”)
    WSHShell.RegWrite “HKEY_CURRENT_USERSoftwareMicrosoftWindowsShellNoRoamMUICache@D:WINDOWSsystem32netshell.dll,-1200” , “Quinhack_” ,”REG_SZ”
    me tendria que cambiar el nombre de mipc a quinhack_… pero… bueno el lio que tango es que el nombre del la claver que quiero cambiar es algocomo, @C:WINDOWSsystem32netshell.dll,-1200, y mi vbs se cree que las “” es una ubicacion y no se da cuenta que en realidad es el nombre de la claver. porlotanto no me deja cambiar el nombre de esta clave!
    intenten asignarle una variable al nombre de la calave y no me funciono, tal ves alguien me pyeda dar una idea como cambiar el nombre desde un vbs!
    desde ahora muchas gracias

    QUINHACK_

  • Bueno todo muy lindo pero a mi este script en algunas pc no me anda anda por ejemplo en la del trabajo no me anda corre XP.. bien entendi el sentido blabla y para que sirve cada cosa pero puse tal cual muestran y no funciona me tira un error de compilacion con el codigo 800A0401 linea 2 caracter 10 en fin ..

    ***********************************************
    ‘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(“HKCUControl PanelDesktopWallpaper”)

    ‘Mostramos en un mensaje el valor de la clave
    MsgBox strClave

    ‘Destruimos la variable de objeto
    Set oReg = Nothing

    ********************************************

    Em logicamente el problema esta en la linea 2 segun la ventanita ¿ Que podria ser bichitos de luz?¿la solucion sugerencias?

  • @Xibor: eso es porque tienes que reemplazar las comillas dobles que copias en el texto de la web por las " [las de la tecla 2]

  • Quinhack_

    muchas gracias @Xibor!!!!

  • Quinhack_

    Dim oReg
    Set oReg = CreateObject(“Wscript.Shell”)
    Dim strClave
    strClave = oReg.RegRead(“HKCUControl PanelDesktopWallpaper”)
    MsgBox strClave
    Set oReg = Nothing

    aca lo tenes en fotrmato *.vbs (lo guardas en un boloc de notas de forma nombre.vbs y lo ejecutas) cambiale las comillas como (“) por las de Shift + 2…
    eso anda en todas las pc, es lo mismo que vos creastes solo un poco modificado!
    suerte!

  • Xibor

    gracias hanok.. aunque a eso ya lo he hecho y aclare que en algunas pc anda… igualmente gracias bichito de luz xD

  • Henry

    Buenas.
    Gracias por publicar esta entrada. Solo nua observación, en vbs no se declaran los tipos de las variables (ejemplo: dim test as string) , si los tipos son declarados se genera un error en tiempo de ejecución.

    Muchas gracias.

  • jangelep

    Muy buen aporte

  • Pingback: RegCross.com - Limpiar PC - Limpiador de Registro para Windows Vista, XP, 2000, 98()

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.