Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Problema al autoiniciar aplicación (https://www.clubdelphi.com/foros/showthread.php?t=65923)

bosster_018 22-01-2010 05:58:20

Problema al autoiniciar aplicación
 
Hola amigos del ClubDelphi…

Tengo un problema que no puedo resolverlo por mi mismo.
Empezaré desde el principio a explicar lo que me consterna con un simple proyecto que tengo en mente, pero que por ese motivo no puedo terminarlo.
(Por si acaso esta pregunta es demasiado extensa y si querían prepararse un cafecito, háganlo ahora pues hasta que terminen de leer esto, puede que se olviden de hacerlo :rolleyes:)

Estoy realizando una aplicación del tipo “Agenda” para informar al usuario que es cumpleaños de la persona anotada en mi aplicación.
Este proyecto lo escribí pensando en mis familiares, ya que a la mayoría les es difícil acordarse de los cumpleaños de todos.
Así que me propuse a solucionar este problema, mediante una aplicación sencilla pero útil para nosotros.
Bueno… Iré al grano…

Este proyecto lo tengo terminado (incluso pienso subirlo en los ejemplos de las FTP del ClubDelphi).
Mi aplicación consistía en autoiniciarse al encender Windows y mediante código, averiguar si la fecha anotada en la aplicación, concuerda con la fecha del sistema (para saber si hay un cumpleañero). Todo esto lo realizaba de forma oculta para no molestar al usuario.

Pero llegó el problema… AL querer iniciar mi aplicación, esta no daba señal de ejecutarse. Ya sé lo que piensan… “El código está mal escrito” pero me puse a indagar a mi aplicación, buscando donde se originaba el problema. Pero no encontré nada.

Después de varios intento y código cambiado… Se me ocurrió realizar otra miniaplicación que se autoinicie al encender Windows y en el autocreate realizar un pequeño procedimiento para abrir un archivo.
El procedimiento lo realizo con el “ShellExecute”

Después de agregar esa pequeña aplicación al inicio de Windows, NO SE EJECUTO EL PROCEDIMIENTO.
También lo probé en otra máquina (pensando que el problema era mi CPU). Pero tampoco dio resultado.

Al final, después de mucho intentos fallidos, recurro a ustedes, pues mi otra interrogante es que si este problema es general o sólo del Delphi que tengo instalado (Delphi 7).

El código lo subí aquí para que prueben por sí mismo.
Por si acaso al ejecutar la aplicación (exe), este funciona correctamente. El problema es al iniciarse en Windows que no se ejecuta correctamente pues no realiza nada. Inclusive añadiendo un botón con el procedimiento escrito en el mismo, no fuciona.

Por favor, si pueden sacarme de esta duda tremenda que tengo, ya que no me explico por que no quiere ejecutarse bien la llamada al ShellExecute ni tampoco mi aplicación original.

En resumen. ¿Ustedes ven algún problema al iniciarse en Windows con esta aplicación?
Este mini-ejemplo se encarga de abrir una imagen de los integrantes del ClubDelphi que postearon hace tiempo. (La imagen se abre al crearse la aplicación o al hacer click en la botón de la misma)
Ojo: Esta aplicación se deberá probar al iniciar Windows, pues al ejecutarlo manualmente, este sí funciona.

Muchas gracias por entrega su valioso tiempo en ayudar a este novatillo, pues inclusive no puedo dormir pensando ¿Qué pasa con eso?.

Me despido y espero que me puedan decir que pasa. Lo más probable es que mi Delphi se hay desconfigurado (pero lo dudo). Pero sé que ustedes tienen la respuesta al probar lo que conmigo no funciona.

Ahí abajo les dejo el código que no me funciona al ejecutarse en el Inicio de Windows (Auto-Run)

Autoiniciar.zip


Muchas gracias por su valioso tiempo.
Saludos!

Casimiro Noteví 22-01-2010 11:08:04

Lo he quitado del 'OnCreate' y lo he pasado al 'OnActivate', le he añadido para que busque en el directorio donde está el ejecutable y ¡¡¡funciona!!! :)

Código:

procedure TForm1.FormActivate(Sender: TObject);
begin
  regedit(1);
  ShellExecute(Handle, '', PChar(ExtractFilePath(ParamStr(0))+'\gg.jpg'), '', '', SW_SHOWNORMAL);
end;


rgstuamigo 22-01-2010 16:17:50

Bueno, aunque parece que Casimiro lo solucionó, solo una tengo una observacion a tu codigo y es este cuestionamiento:¿Por que cada ves que corre tu aplicacion lo registras en los registros de windows(autorun)?:confused:
¿Acaso no bastaria con registrarla una sola ves y ya?:confused:. Supongo que cada ves que se registra algo en los registros de Windows, el Sistema Operativo lo que hace es tomar en cuenta eso sólo la siguiente ves que se ejecute, es decir al Reiniciarse de nuevo(de ahí que cada ves que instalamos un programa, Windows nos pide que reiniciemos, cosa que segun he visto no sucede con Linux,pues ya diran los linuseros ;)), pero segun tu codigo, al reiniciarse de nuevo, pues nuevamente registra(Aunque en la misma Key) a tu aplicacion, y es un ciclo que se repite nuevamente...;).
Quisas lo que debieras hacer es: Antes de registrar tu aplicacion en los registros de Windows, primero deberias verificar si ya antes no se había registrado, para no estar nuevamente registrando.:rolleyes:;).
Pruebalo...:)

Casimiro Noteví 22-01-2010 18:59:59

Porque en linux no existe (menos mal) el registro de windows, ni el registro de linux :D

En linux cuando ejecutas un programa, éste mira su configuración y listo, no hace falta reiniciar tras una instalación o actualización.

rgstuamigo 22-01-2010 19:04:27

Cita:

Empezado por Casimiro Notevi (Mensaje 351578)
Porque en linux no existe (menos mal) el registro de windows, ni el registro de linux :D

En linux cuando ejecutas un programa, éste mira su configuración y listo, no hace falta reiniciar tras una instalación o actualización.

Waooooh :eek:, Casimiro...te las sabes todas....:D:D.
Ya esta todo apuntado..ahora lo entiendo...:rolleyes::D

Chris 22-01-2010 19:32:38

Cita:

Empezado por rgstuamigo (Mensaje 351540)
Supongo que cada ves que se registra algo en los registros de Windows, el Sistema Operativo lo que hace es tomar en cuenta eso sólo la siguiente ves que se ejecute, es decir al Reiniciarse de nuevo(de ahí que cada ves que instalamos un programa, Windows nos pide que reiniciemos, cosa que segun he visto no sucede con Linux,pues ya diran los linuseros ;))

Cuando cambias el registro no es necesario que el sistema se reinicie. Basta que lo haga la rutina que necesita los datos de X registro. Cuando es necesario un reinicio del sistema en Windows es porque alguna actualización o instalación de un programa necesita que las nuevas configuraciones de un servicio clave (principalmente) del sistema sean reiniciados. También cuando se necesita hacer un patch en archivos de programas que están abiertos y que por estabilidad del sistema no pueden detenerse como el Kernel o otro archivo del núcleo.

Saludos.

Chris 22-01-2010 19:39:16

Cita:

Empezado por Casimiro Notevi (Mensaje 351490)
Lo he quitado del 'OnCreate' y lo he pasado al 'OnActivate', le he añadido para que busque en el directorio donde está el ejecutable y ¡¡¡funciona!!! :)

El problema con el Evento OnActivate es que el código contenido será ejecutado cada vez que el formulario recupere el foco, además que se ejecuta cuando se abre la ventana.

Sinceramente es algo extraño esto. Será algún bug en la VCL? Veo muy díficil que el problema sea de Windows porque los eventos aquí involucrados datan de las primeras versiones de Windows y no creo que en tanto tiempo alguien no halla descubierto un problema como este.

rgstuamigo 22-01-2010 19:40:48

Ok...
 
Apuntado..tambien.. Chris..;).
Saludos...:)

bosster_018 22-01-2010 21:28:08

Solucionado
 
Amigo Casimiro... Perdón quise decir: Moderador CasimiroNotevi

El problema lo arreglaste totalmente. Pero no con poner el código en el OnAtivate del formulario, sino con esta parte:

Código Delphi [-]
ShellExecute(Handle, '', PChar(ExtractFilePath(ParamStr(0))+'\gg.jpg'), '', '', SW_SHOWNORMAL);

No se porque razón es que si uno no agrega el Path para ejecutar un archivos o mejor dicho localizar el archivo directamente como lo he escrito en el ejemplo:

Código Delphi [-]
ShellExecute(Handle,nil,('GG.JPG'),'','',SW_Shownormal);

No se ejecuta normalmente al iniciarse en Windows, pero sí al ejecutarlo manualmente :eek:

Parece que hace la diferencia al agregar "PChar(ExtractFilePath(ParamStr(0))+'\gg.jpg')"
en vez de poner directamente nombre del archivo que queremos localizar en ese momento (asumiendo que está en el mismo directorio)

Si lo esciribmos en el FormCreate y en el Botón con lo agregado anteriormente. Este ya puede ejecutarse normalment al iniciarse en Windows, osea FUNCIONA :D

Incluso se resolvió lo escrito anteriormente en este hilo:

realmente es necesario especificar el path?

La respuesta sería: SI

También les informo que con esa simple pero valiosa ayuda que me brindaron. pude terminar mi proyecto pues ya incluí el Path en la sentencia que fallaba al autoejecutarse al iniciar Windows.

MUCHAS GRACIAS amigos del ClubDelphi

La verdad... Ustedes ayudan bastante...
Perdonen si da chiste lo que voy a decir... Pero

USTEDES SON UNOS BENDITOS GENIOS
:p

Saludos.. Y recuerden agregar el path aunque sea mas trabajoso. :rolleyes:

Casimiro Noteví 22-01-2010 22:07:46

Cita:

Empezado por bosster_018 (Mensaje 351618)
Amigo Casimiro... Perdón quise decir: Moderador CasimiroNotevi

Sigo siendo casimiro :)


Cita:

Empezado por bosster_018 (Mensaje 351618)
USTEDES SON UNOS BENDITOS GENIOS :p

Genios, sí, aquí hay algunos genios, pero yo no, lo único que tengo es 24 años programando :o y el email de quien conoce las respuestas :D


La franja horaria es GMT +2. Ahora son las 05:38:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi