MODIFICANDO EL REGISTRO DESDE VB

Iniciado por dxr, 11 Junio 2003, 06:48 AM

0 Miembros y 1 Visitante están viendo este tema.

dxr

Hola tengo un par de dudas referente al registro.
Mi idea es editar copiar y añandir al registro:

Private Sub Command1_Click()
On Error Resume Next
MsgBox "Se creara una clave en el Registro HKEY_CURRENT_USER\Software\RAdmin\v2.xD\Parameters y se llamara lala y su ruta sera c:\lala.txt", vbInformation, "Crear clave al registro"
Set reg = CreateObject("WScript.Shell")
reg.regwrite "HKEY_CURRENT_USER\Software\RAdmin\v2.xD\Parameters", "C:\lala.txt"
End Sub

Private Sub Command2_Click()
On Error Resume Next
MsgBox "Este codigo borrara la clave creada,si existiera", vbInformation, "Borrar clave"
Set borrar = CreateObject("WScript.Shell")
borrar.RegDelete "HKEY_CURRENT_USER\Software\RAdmin\v2.xD"
End Sub

Private Sub Command3_Click()
On Error Resume Next
MsgBox "Se copiara una clave en el Registro HKEY_CURRENT_USER\Software\RAdmin\v2.xD\Parameters y se llamara lala2 y su ruta sera c:\lala2.txt", vbInformation, "Copiar clave al registro"
Set reg = CreateObject("WScript.Shell")
reg.regcopy "HKEY_CURRENT_USER\Software\RAdmin\v2.0\Parameters", "C:\lala2.txt"
End Sub


bueno pos lo unico q consigo con esto es añadir calves al registro y borrarlas pero por ejemplo no se me borra 2.xD solo su interior...

Y como ago para q me cree un archivo con la entrada de una direccion q yo le indico en el registro?? por ejemplo la clave del radmin q me la guarde en un txt. como seria???


Gracias.
Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.

byebye

#1
acostumbrate a usar la api  ;D, aqui te dejo codigo para crear claves, añadir valor, leer etc luego tu ya t lo montas como quieras.

[
Private Sub Command1_Click()
Dim h, buffer As String
buffer = String(1024, vbNullChar)
'crear una clave
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE", h
RegCreateKey h, "PRUEBA", h
RegCloseKey h
'aqui ya tienes la clave creada
'escribir un valor
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\PRUEBA", h
RegSetValueEx h, "Nombre", 0, 1, ByVal "datos", Len("datos")
' aqui ya tienes el nuevo valor y datos en la clave creada
' borrar del registro el valor de la clave
RegDeleteValue h, "Nombre" ' Aqui se a borrado el nombre "Nombre" y el valor "datos"
RegCloseKey h

RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\PRUEBA", h
RegQueryValueEx h, "Nombre", 0, 1, ByVal buffer, Len(buffer)
' ya tienes en buffer el valor de "Nombre"

RegDeleteKey HKEY_LOCAL_MACHINE, "SOFTWARE\PRUEBA"
RegCloseKey h
' y ya esta todo borrado claves y subclaves
End Sub


acuerdate de declarar la/as constantes (HKEY_LOCAL_MACHINE etc)

PD:
que se me paso jejej, para lo de el archivo ya lo que pilles en buffer open "archivo" etc etc y lo guardas


dxr

#2
La verdad esq no tengo ni idea de manejar las apis... pero esto del registro parece facil muchas gracias....

aunq no me kedo claro como crear el archivo....

en el archivo lo q pretendo es copiar una clave del registro por ejemplo la clave en hexadeciamal de un juego...

se me olvidava para utilizar RegCloseKey... todo eso imagino q sera con las apis.... pero ay q añadir algo al formulario????

Gracias. ;)
Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.

byebye

si tienes que declarar las constantes y las funciones.


Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private 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
Private 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

Private Const HKEY_LOCAL_MACHINE = &H80000002



sobre lo de el archivo

Open "c:/archivo.txt" For Append As #1
Write #1, "datos a escribir"
Close #1

para q t de una idea.

otra cosa el ejemplo es para leer string si vas a leer otro tipo de dato tienes que modificar lo q es el tipo de dato y alguna cosilla mas.

dxr

xD MUCHAS GRACIAS.

no me as entendido con lo del archivo mira te digo mi idea mi idea es crear un ejecutable q ya vere q tonteria le pongo pero q al cargar el form accede a unas rutas del registro a las mas comunes de estos juegos de jugar por internet tipo counter, half life..... y q me COPIE las claves a un txt y me lo suba al ftp pues bien q me las suba al ftp se hacerlo acer entradas al registro mediante las apis teoricamente ya se hacerlo gracias a ti  ;) y crear archivos tanbien se acerlos pero lo q no se acer es q me copie las claves del juego q se almacenan en el registro en un txt para q me lo suba al ftp....

nose si me entiendes.... Muchas gracias me as enseñado bastante  :D
Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.

byebye

me parece que no nos entendemos mutuamente  :P, en la variable buffer tienes el valor de la clave que lees pilla esa variable y metela en un archivo de texto.

por ejemplo supon q tiene
hkey_local_machine/software/halflife > CD-KEY 12345678

buffer tendra 12345678 ¿es eso a lo q te refieres?

dxr

xDDDDDD si pillo pero........

q fallo no s eme ocurre como meter un valor a un archivo

Open "c:/archivo.txt" For Append As #1
Write #1, buffer
Close #1

podria ser??? q va a ser q no....

joer tio eres la poia  :D te lo agradezco millllllll
Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.

byebye

exacto asi escribes en el archivo el valor que tu buscas.

dxr

Como siempre... las clases teoricas no lo es todo bien lo estoy yevando a la practica..

Esyte es un trozo de codigo imprscindible...

Dim h, buffer As String
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private 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
Private Const HKEY_CURRENT_USER = &H80000002

Private Sub Form_Load()
buffer = String(1024, vbNullChar)
RegOpenKey HKEY_CURRENT_USER, "\Software\RAdmin\v2.0\Parameters", h
RegQueryValueEx h, "Parameters", 0, 1, ByVal buffer, Len(buffer)
Open "c:/archivo.txt" For Append As #1
Write #1, buffer
Close #1
End Sub


bien en el archivo q me crea aparece:

"
"

tonces no entiendo xq ay q añadir la ruta del registro asi:

RegOpenKey HKEY_CURRENT_USER, "\Software\RAdmin\v2.0\Parameters", h

y cual es la funcion de h ahi?

y tambien e supuesto q esto se declaraba asi:

Private Const HKEY_LOCAL_MACHINE = &H80000002

q es lo q esta mal?

esto d elas apis es un poco lioso
xD
Hacer preguntas concretas, claras y aportando toda la documentación necesaria.
De lo contrario, no tendreis una respuesta clara.

byebye

en h te devuelve el handle para referirte a la clave abierta hasta q la cierres, fijate en lo q t puse antes:

RegOpenKey HKEY_CURRENT_USER, "\Software\RAdmin\v2.0\Parameters", h   > recibes en h el handle
RegQueryValueEx h, "Parameters", 0, 1, ByVal buffer, Len(buffer)   > aqui ya nos referimos a ese handle (h) que es la clave abierta.

por otra parte usas HKEY_CURRENT_USER ¿la tienes declarada? ( Private Const HKEY_CURRENT_USER = &H80000001 )

el tipo de dato que vas a leer que es? como ya t dije ese codigo lee string