Carlos, esto te va a encantar
Hola Carlos.
Creo que tengo lo que buscabas.
Esta es la forma correcta de grabar en la rama HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
Por supuesto todo el cotarro esta controlado por un modulo de clase que tienes que incluir en tu aplicacion, y que no pongo aqui por lo farragoso que resultaria. Confirmame una direccion de correo para que te la envie.
El siguiente codigo, yo le he puesto en el evento unload del formulario de configuracion de la aplicacion
En este formulario hay un checkbox (opt) enlazado a un campo booleano de la base de datos.
Al descargar el formulario se mira el estado del check box y se comprueba si ya esta entrada la clave. Si esta seleccionado el opt y no esta la clave, se añade. Si ya está, se sale sin mas, y si se ha deseleccionado, se borra la clave para que la aplicacion no arranque en el siguiente reset.
He incluido unos msgbox para controlar que pasa en cada accion, pero una vez se sabe que funciona, se pueden quitar.
En fin, pruebalo y dime si te dá alguna pega. Te garantizo que funciona.
Select Case opt.Value
Case 1
' primero comprobamos si la clave ya existe
Dim s As String
s = mReg.GetRegString(cvRun, App.Title)
If s <> "" Then
MsgBox "Ya existe la clave"
Exit Sub
Else
s = mReg.GetRegString(cvRun, App.Title)
If mReg.SetReg(cvRun, App.Title, App.Path & "" & App.EXEName & ".exe") = ERROR_NONE Then
MsgBox "Entrada al registro correcta."
End If
End If
Case 0
' si se ha deseleccionado la casilla opt quitamos la clave
s = mReg.GetRegString(cvRun, App.Title)
If s <> "" Then
If mReg.DeleteValue(cvRun, App.Title) = ERROR_NONE Then
MsgBox "La clave se ha eliminado del registro."
End If
End If
End Select
En el evento load_form
Set mReg = New cQueryReg
y en (General) declaramos la clase y la variable cvRun
Private mReg As cQueryReg
Private Const cvRun As String = "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun"
Solo te hara falta el modulo de clase. Dime donde quieres que te lo envie.
Un saludo amigo.