Registro de Windows 9x

Hola rohcodom!
Como veo que eres experto en Windows, quiero plantearte una duda sobre el registro de windows 9x.
Estoy desarrollando una pequeña aplicación para modificación de claves del registro y expongo lo que sigue:
Como sabrás, para crear claves del registro de windows, lo podemos hacer directamente, utilizando el editor del registro (Regedit.exe), y así mismo se puede realizar creando un archivo con extensión .reg, en el cual hallamos incluido la cadena pazra ubicación de las claves, así como los valores de la misma, y agregarlo al registro, bien desde el editor, o bien haciendo doble click sobre el archivo, para lo cual se nos pide confirmación. Ahora bien, para modificar y eliminar claves, solo podemos hacerlo directamente, utilizando el editor de registro, localizar la clave y modificarla o eliminarla.
Bien, mi pregunta es:
Existe algún modo por el cual podamos crear, modificar o eliminar claves del Registro de Windows, sin necesidad de utilizar el editor del registro, y de forma en el cual no se nos pida ningún tipo de confirmación, es decir, trabajando en segundo plano.
Gracias por adelantado.
Un saludo
1

1 Respuesta

192.825 pts.
Dado que mi área no es programar, te recomendaría mucho que trataras de conseguir el libro "A Fondo con el Registro de Windows". De cualquier forma, le pregunté a una amiga experta en programar usando API's y esto fue lo que me contestó:
Acá te adjunto un modulo que uso para manipular el registro usando APIs.
Option Explicit
'Sólo sirve para RegCreateKeyEx
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
'Constantes para la Raiz
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
'Otras constantes varias
Public Const KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0
'Funciones para abrir, cerrar, crear y eliminar claves
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal
ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long)
As Long
Public Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias
"RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal
Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal
samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult
As Long, lpdwDisposition As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias
"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
'Funciones para trabajar con valores
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long)
As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias
"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Sub regEliminarClave(Raiz As Long, Clave As String)
Dim ret As Long
ret = RegDeleteKey(Raiz, Clave)
End Sub
Public Sub regEliminarValor(Raiz As Long, Clave As String, Valor As String)
Dim ret As Long
Dim hClave As Long 'Handle de la clave
'Como siempre, primero abrimos la clave que
'contiene el valor buscado
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
'Eliminamos el valor buscado
ret = RegDeleteValue(hClave, Valor)
'Cerramos la clave
RegCloseKey (hClave)
End Sub
Function regGetDatoString(Raiz As Long, Clave As String, Valor As String) As
String
Dim hClave As Long 'Handle de la clave que contiene el valor
buscado
Dim Longitud As Long 'Longitud de la cadena
Dim Dato As String 'Una variable para contener el dato
Dim ret As Long
'Antes que nada, hay que abrir la clave y obtener el handle (hClave)
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
'Ahora obtenemos la longitud del dato (la cadena en este caso)
ret = RegQueryValueEx(hClave, Valor, 0, 0, 0, Longitud)
'Preparamos un buffer para contener la cadena, segun su longitud
Dato = String(Longitud, 0)
'Llamamos a RegQueryValurEx para obtener el dato
ret = RegQueryValueEx(hClave, Valor, 0&, REG_SZ, ByVal Dato, Longitud)
'No tenemos que olvidarnos de cerrar la clave...
ret = RegCloseKey(hClave)
'Quitamos el último caracter de la cadena, ya que es un Chr(0)
'y devolvemos el dato en el valor de la función
regGetDatoString = Left(Dato, Longitud - 1)
End Function
Function regGetDatoLong(Raiz As Long, Clave As String, Valor As String) As
Long
Dim hClave As Long 'Handle de la clave que contiene el valor
buscado
Dim Dato As Long 'Una variable para contener el dato
Dim ret As Long
'Antes que nada, hay que abrir la clave y obtener el handle (hClave)
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
'Llamamos a RegQueryValurEx para obtener el dato
ret = RegQueryValueEx(hClave, Valor, 0&, REG_DWORD, Dato, 4)
'No tenemos que olvidarnos de cerrar la clave...
ret = RegCloseKey(hClave)
'Devolvemos el número en el valor de la función
regGetDatoLong = Dato
End Function
Public Sub regCrearClave(Raiz As Long, Clave As String)
Dim hClave As Long 'El Handle de la clave
Dim SA As SECURITY_ATTRIBUTES 'No la necesitamos. Solo se pasa como
parametro
Dim ret As Long
'Creamos la clave "Clave"
ret = RegCreateKeyEx(Raiz, Clave, 0&, vbNullString,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, SA, hClave, 0)
'Despues de crear la clave, esta queda abierta
'asi que hay que cerrarla debidamente
RegCloseKey (hClave)
End Sub
Public Sub regSetDatoString(Raiz As Long, Clave As String, Valor As String,
Dato As String)
Dim hClave As Long 'Handle de la calve contiene el valor
Dim ret As Long
'Abrimos la clave que contiene el valor buscado
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
'Establecemos el valor string (REG_SZ)
ret = RegSetValueEx(hClave, Valor, 0, REG_SZ, Dato, Len(Dato))
'Cerramos la clave que abrimos antes
RegCloseKey (hClave)
End Sub
Public Sub regSetDatoLong(Raiz As Long, Clave As String, Valor As String,
Dato As Long)
Dim hClave As Long 'Handle de la calve contiene el valor
Dim ret As Long
'Abrimos la clave que contiene el valor buscado
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
'Establecemos el valor string (REG_DWORD)
ret = RegSetValueEx(hClave, Valor, 0, REG_DWORD, Dato, Len(Dato))
'Cerramos la clave que abrimos antes
RegCloseKey (hClave)
End Sub
Public Function regTipoValor(Raiz As Long, Clave As String, Valor As String)
As Long
Dim Tipo As Long
Dim Longitud As Long
Dim hClave As Long
Dim ret As Long
'Abrimos la clave, consultamos el tipo, y la cerramos
ret = RegOpenKeyEx(Raiz, Clave, 0, KEY_ALL_ACCESS, hClave)
ret = RegQueryValueEx(hClave, Valor, 0, Tipo, 0, Longitud)
ret = RegCloseKey(hClave)
regTipoValor = Tipo
End Function
Roberto Henry
rohcodom@aucland.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas