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 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
ola
ese code me da error,me dice procedimiento externo no valido :-\
saludos[sh]
¿En que linea te da el error?
¿Tenes permiso para leer el registro?
El codigo esta provado y funciona =S Uso WindowsXP SP2.
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]
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.-
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]
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.-
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]
Prueba substituyendo true por 1 y false por 0... ;) ;) ;)
ola
sigue sin andar... cambie el true por 1 y nada
saludos[sh]
Perooo.. el valor WindowsUpdates, EXISTE ??
ola
sip ese valor existe y tiene una ruta que lleva a c:\WINDOWS\system32\windupdate.exe
saludos[sh]
En mi PC no exitste.....Estas seguro que es en HKCU??? :-\ :-\ :-\
Ske si no, yo no le enkuentro fallo....
Salu2
ola
Cita de: _Hendrix_ en 13 Junio 2006, 22:07 PM
En mi PC no exitste.....Estas seguro que es en HKCU??? :-\ :-\ :-\
Ske si no, yo no le enkuentro fallo....
Salu2
juas pos claro como no la vas a tener si la crea otro programa mio,esto es para que lo compruebe na mas..
saludos[sh]