Sección de tutoriales y manuales vb

Tutorial Windows Script Host

para manipular el registro



 

 

Guía que explica los aspectos básicos de como usar Windows Script Host para poder acceder al registro, ya sea para leer , modificar, crear o eliminar datos, claves y valores del mismo

 

 

 

 

 

 

1 - Introducción

Para tener un control total sobre la manipulación del registro, hay que utilizar las funciones Api para el registro (RegCloseKey, RegCreateKey, RegDeleteKey, RegQueryValue etc...), pero utilizando este modelo de objetos se pueden realizar las operaciones comunes sobre el mismo, sobre todo si no estamos muy acostumbrados a manejar el Api, ya que es mas fácil

 

Windows Script Host posee 3 principales métodos que permiten leer, escribir y eliminar valores. Estos son:

 

 

Hay que comentar también que mediante WSH se pueden hacer otras muchas operaciones, pero aquí solo solo se ven las relacionadas al registro.

Para poder acceder a dichos métodos es necesario crear mediante automatización, con CreateObject, un objeto de tipo wscript.Shell. También se puede incluir la referencia Windows Scripting Host desde el menú de referencias de vb:

 

vista de la ventana de referencias de visual basic

 

una ves agregada podemos acceder declarando la variable de esta forma:

 

Dim Objeto As WshShell

 

Esta captura muestra la lista de objetos a los que podemos acceder una ves declarada la variable WshShell

 

vista de los metodos propiedades y objetos de windows script host desde,la ventana de codigo de visual basic

 



Para crear la variable mediante automatización, se hace mediante CreateObject, especificando que vamos a crear un objeto de tipo "Wscript.Shell". Luego ya podemos utilizar los métodos mediante el objeto que acabamos de crear. Por último cuando no se necesita utilizar mas ese objeto, lo eliminamos con la sentencia Nothing. Ejemplo:

 

'Variable de objeto
Dim MiObjeto As Object

'Creamos el objeto
Set MiObjeto = CreateObject("Wscript.Shell")

'Lo usamos, en este caso leemos una clave y mostramos el valor
MsgBox MiObjeto.RegRead("RamaDelRegistro que vamos a leer")

'Eliminamos la variable
Set MiObjeto = Nothing


Otra detalle. Para abreviar las ramas del registro podemos utilizar lo siguiente:

 


2 - Método RegRead - Para leer datos del registro

 

Como sabemos el registro puede contener los siguientes tipos de datos:

A continuación un ejemplo para leer un valor de tipo String del registro, especificamente vamos a leer el valor de la rama:

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion



En Xp esta clave tiene una subclave entre otras llamada: "WallPaperDir", que contiene el path o ruta donde se especifican los fondos de escritorio de Windows:

 

'creamos una variable para usar el método RegRead
Dim MiObjeto As Object

'Creamos el objeto
Set MiObjeto = CreateObject("Wscript.Shell")

'Mostramos mediante un Msgbox el valor del dato "WallPaperDir" que tiene la ruta antes mencionada
MsgBox MiObjeto.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WallPaperDir")

'Eliminamos la variable de objeto
Set MiObjeto = Nothing

 

Por ejemplo si quisieramos almacenar el valor devuelto deberíamos crear una variable de tipo String

 

Dim Valor As String

Valor = MiObjeto.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WallPaperDir")

 

Nota: Si no conocemos el valor que vamos a obtener, podemos declarar a la variable que almacenará el dato como de tipo Variant.

Otra cosa importante es que en el parámetro de RegRead donde especificamos la rama a leer, no debe terminar con la barra "\" ya que daría un error

 


3 - Método RegDelete - Eliminar valores del registro

 

Para eliminar una rama, clave, dato o valor es muy simple, solo tenemos que especificar la ruta completa en el parámetro:

Nota importante: Antes de probar hacer un backup de la rama para poder restaurarla por si las moscas.

Para hacer un backup de la rama o clave hay que posicionarse en ella, con el botón derecho elegir Exportar clave o rama y elegir una ubicación donde se generará un archivo .Reg para poder restaurar dicha clave. Al darle dobleclik se restaurará la clave al registro preguntando anteriormente si se desea restaurar dichos valores.

Siguiendo. El ejemplo anterior, para eliminar la clave "WallPaperDir", lo haríamos asi:

 

'Variable de objeto
Dim MiObjeto As Object


'Seteamos la variable anterior para poder usarla para eliminar la clave
Set MiObjeto = CreateObject("Wscript.Shell")

'Eliminamos la clave WallPaperDir
MiObjeto.RegDelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WallPaperDir"

'Eliminamos la variable de objeto
Set MiObjeto = Nothing

 


4 - Método RegWrite - Crear y modificar valores

 

Para crear un valor, dato o clave, pongamos un ejemplo simple de como grabar en la rama

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

que es la que tiene los path de las aplicaciones que se inician cuando arranca Windows, es decir poder poner nuestra aplicación.

Dentro de Run hay que crear un dato, en este caso le ponemos el nombre de nuestro Proyecto mediante App.ExeName, y dentro de esta clave le debemos especificar la ruta de nuestro ejecutable: Para eso el método RegWrite tiene 3 parámetros

RegWrite Rama, elValoraGrabar, ElTipodeDato

El tipo de dato puede ser un (String, Entero, binario etc..)

En este caso como la ruta es un String no es necesario especificar el tipo de dato, solo el valor y la Rama:

Ejemplo:

 

'Variable para el nombre de nuestro Exe
Dim NuestroPrograma As String
'variable para la Ruta de nuestra aplicación
Dim Ruta As String

'Variable de objeto
Dim MiObjeto As Object

'Seteamos la variable y creamos la referencia
Set MiObjeto = CreateObject("Wscript.Shell")

NuestroPrograma = App.EXEName

Ruta = App.Path & "\" & App.EXEName & ".exe"

'Escribimos el valor en el registro
MiObjeto.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" & NuestroPrograma, Ruta

'Eliminamos la variable
Set MiObjeto = Nothing

 

Por último hay que tener en cuenta que si creamos un dato de tipo Dword (un Entero), y le grabamos un String o un valor Binario, obviamente va a saltar el conocido error número 13 "No coinciden los tipos".

 

5 - Enlaces relacionados

 

 


Buscar en Recursos vb