Crear y comprovar claves de registro

Iniciado por Saok Dagon, 11 Junio 2006, 15:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

Saok Dagon

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
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc

NYlOn

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

Saok Dagon

ola

ese code me da error,me dice procedimiento externo no valido  :-\

saludos[sh]
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc

NYlOn

¿En que linea te da el error?
¿Tenes permiso para leer el registro?

El codigo esta provado y funciona =S Uso WindowsXP SP2.

Saok Dagon

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]
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc

NYlOn

Tenes razon, me olvide de poner una funcion y un par de constantes  :-X.
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 ;D 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.-

Saok Dagon

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]
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc

NYlOn


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.-

Saok Dagon

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]
www.colgados.net date una pasadita!

Todo el anime, manga, pelis, series...etc

Hendrix

Prueba substituyendo true por 1 y false por 0... ;) ;) ;)

"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