Autor
|
Tema: Crear y comprovar claves de registro (Leído 3,886 veces)
|
Saok Dagon
Desconectado
Mensajes: 115
SaOk
|
ola
Bueno tengo un problema,necesito que mi programa cree una clave en el registro(eso se hacerlo).Luego en otro programa necesito que compruebe esa clave(no se como puedo comprovarla) si esta termine su propio proceso(esto se hacerlo) y si no esta siga la ejecucion del resto del codigo.
aver si me pueden exar una mano
saludos[sh]
pd:tengo unos conocimientos casi medios de VB
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
En un modulo: 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 RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Function RegLeerClave(Key As String, SubKey As String) As Boolean 'Devuelve TRUE si existe, FALSE si no existe Dim regRes As Long Key = LLave(Key) RegOpenKey Key, SubKey, regRes If regRes = 0 Then RegLeerClave = False Else RegLeerClave = True End If RegCloseKey regRes End Function
Para usarlo seria: If RegLeerClave("HKLM", "Software\Prueba") = True then 'Prueba seria la clave a comprobar... End 'Terminamos el programa end if
|
|
|
En línea
|
|
|
|
Saok Dagon
Desconectado
Mensajes: 115
SaOk
|
ola ese code me da error,me dice procedimiento externo no valido saludos[sh]
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
¿En que linea te da el error? ¿Tenes permiso para leer el registro?
El codigo esta provado y funciona =S Uso WindowsXP SP2.
|
|
|
En línea
|
|
|
|
Saok Dagon
Desconectado
Mensajes: 115
SaOk
|
ola
If RegLeerClave("HKLM", "Software\Prueba") = True then 'Prueba seria la clave a comprobar... End 'Terminamos el programa end if
concretamente ahi.
Si tengo permisos para editar el registro.
saludos[sh]
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Tenes razon, me olvide de poner una funcion y un par de constantes . Entonces, a lo que era el modulo antes, le agregas esto y va a andar bien: Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_CURRENT_CONFIG = &H80000005
Private Function LLave(sKey As String) As String Select Case UCase(sKey) Case "HKCR" LLave = HKEY_CLASSES_ROOT Case "HKCU" LLave = HKEY_CURRENT_USER Case "HKLM" LLave = HKEY_LOCAL_MACHINE Case "HKUS" LLave = HKEY_USERS Case "HKCC" LLave = HKEY_CURRENT_CONFIG Case Else LLave = sKey End Select End Function
En realidad la funcion es por comodidad En vez de tener que escribir HKEY_LOCAL_MACHINE escribis HKLM y lo cambia automaticamente a su constante (en este caso, "&H80000002"). Espero que ahora funcione... Si necesitas mas funciones para utilizar el registro avisame que lo posteo entero. Saludos.-
|
|
|
En línea
|
|
|
|
Saok Dagon
Desconectado
Mensajes: 115
SaOk
|
ola
si,pero ahora me falta que dentro de esa ruta lea un valor alfanumerico osea
If RegLeerClave("HKCU","SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "nombre") = False Then end if
pero no anda,me da error en lo de RegleerClave
saludos[sh]
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Yaaaaaaaaaaaaaa te entendi!!! No queres leer una CLAVE queres leer un VALOR, que esta adentro de una CALVE (las CLAVES son las carpetitas y los valores son las cosas que guardan informacion) Y el codigo no te funciona porque estas poniendo un parametro de mas (Nombre). A ver si esto te sirve... 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 Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Function RegComprobarValor(Key As String, SubKey As String, Nombre As String) As Boolean Dim regRes As Long, dtTipo As Long, dtTamaño As Long, lResult As Long Key = LLave(Key) RegOpenKey Key, SubKey, regRes lResult = RegQueryValueEx(regRes, Nombre, 0, dtTipo, ByVal 0, dtTamaño) If lResult = 0 Then RegComprobarValor = True ElseIf lResult = 2 Then RegComprobarValor = False End If RegCloseKey regRes End Function
Private Function LLave(sKey As String) As String Select Case UCase(sKey) Case "HKCR" LLave = HKEY_CLASSES_ROOT Case "HKCU" LLave = HKEY_CURRENT_USER Case "HKLM" LLave = HKEY_LOCAL_MACHINE Case "HKUS" LLave = HKEY_USERS Case "HKCC" LLave = HKEY_CURRENT_CONFIG Case Else LLave = sKey End Select End Function
Entonces, para utilizarlo seria asi: MsgBox RegComprobarValor("HKCU", "Software\Microsoft\Windows\CurrentVersion\Run", App.ExeName)
Si existe te va a devolver True y si no existe te va a devolver False. Saludos.-
|
|
|
En línea
|
|
|
|
Saok Dagon
Desconectado
Mensajes: 115
SaOk
|
ola
yo pruebo esto,y me sige dando error aver donde esta mal
Private Sub Form_Load() If RegComprobarValor("HKCU", "Software\Microsoft\Windows\CurrentVersion\Run\", "WindowsUpdates") = True Then MsgBox "funca" Else MsgBox "no funca" End If End Sub
siempre me devuelve no funca
saludos[sh]
|
|
|
En línea
|
|
|
|
Hendrix
|
|
|
|
En línea
|
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
|
|
|
|
|