Visual Basic - Saber si mi aplicación inicia con windows

Life is soft - evento anual de software empresarial
 
Vista:

Saber si mi aplicación inicia con windows

Publicado por Carlos (7 intervenciones) el 18/09/2008 20:12:41
Hola a tod@s

Quiero dar la opción de configurar aplicación para que se inicie con windows. Para lo cual agrego una clave al registro.

¿Cómo puedo comprobar si ya esta registrada o no? Es para impedir que haya más de una referencia en HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun

Gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Saber si mi aplicación inicia con windows

Publicado por Diego (211 intervenciones) el 18/09/2008 20:53:51
Carlos, yo hice algo parecido hace ya un tiempo.
La mecanica es que, de la misma manera que escribes en el registro, las primeras lineas de tu aplicacion tienen que leer y comparar esa misma entrada para actuar en consecuencia.
Dejame que busque como lo hice y te digo algo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Saber si mi aplicación inicia con windows

Publicado por Diego (211 intervenciones) el 19/09/2008 05:45:53
Hola. A ver.
Yo era muy aficionado a 'proteger' mis aplicaciones cuando las dejaba a prueba, introduciendo un contador en el registro de windows que se iba incrementando cada vez que se arrancaba la aplicacion hasta llegar al numero de ejecuciones predetyerminado y entonces saltaba un mensaje diciendo que habia que comprar el programa y bla, bla.

Esto lo hacia con SaveSettings y GetSettings, pero estos solo escriben y leen en un area del registro que si no recuerdo mal es HKEY_CURRENT_USERSoftwareVB y VBA Program y tu supongo que querras escribir, leer y comparar 'otras areas' del registro.

De tu post se desprende que ya escribes en la rama HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun para dar la opcion a tu usuario de que el programa arranque con Windows. Voy bien, no?

Entonces solo necesitamos leer el valor de esa clave y comprobar si ya esta registrada.

Yo tengo una funcion que hace justo eso: leer el valor de cualquier clave del registro y asignarlo a una variable.

El problema es que no recuerdo la sintaxis correcta al pasar el parametro y cuando le paso la rama HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun no encuentro la forma de que acepte la linea.

Si tu escribes correctamente en esta rama, deja la linea aqui para que le eche un vistazo y vea como lo haces.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Saber si mi aplicación inicia con windows

Publicado por Carlos (7 intervenciones) el 19/09/2008 11:45:16
La verdad es que no sé cómo hacerlo. De momento tengo esto a modo de prueba pero no hace nada.

Dim d As String, exi As String
d = App.Path
Dim q As String q= "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun"
'shell("copy " + d +
'Private comp As cq
'exi=
Dim sh As WshShell
Set sh = New WshShell

Dim r As String
r = sh.RegRead(q)
'Private mreg As cq
Call sh.RegRead(q)
Dim k As New Collection
p = Shell("reg HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun /s", vbHide)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Carlos, esto te va a encantar

Publicado por Diego (211 intervenciones) el 20/09/2008 06:23:00
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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar