| 
	
		|  Autor | Tema: Crear y comprovar claves de registro  (Leído 4,579 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 LongPrivate 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 = &H80000000Public 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 LongPrivate 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 |  |  |  |  |  
 
	
 
   |