Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-01-2010
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Poder: 15
bosster_018 Va por buen camino
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 )

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!

Última edición por bosster_018 fecha: 01-06-2010 a las 23:47:38.
Responder Con Cita
  #2  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.065
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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;
Responder Con Cita
  #3  
Antiguo 22-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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)?
¿Acaso no bastaria con registrarla una sola ves y ya?. 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..
Pruebalo...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 22-01-2010 a las 16:26:00.
Responder Con Cita
  #4  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.065
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Porque en linux no existe (menos mal) el registro de windows, ni el registro de linux

En linux cuando ejecutas un programa, éste mira su configuración y listo, no hace falta reiniciar tras una instalación o actualización.
Responder Con Cita
  #5  
Antiguo 22-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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

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 , Casimiro...te las sabes todas.....
Ya esta todo apuntado..ahora lo entiendo...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #6  
Antiguo 22-01-2010
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje
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.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 22-01-2010
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 22-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow Ok...

Apuntado..tambien.. Chris...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #9  
Antiguo 22-01-2010
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Poder: 15
bosster_018 Va por buen camino
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

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

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


Saludos.. Y recuerden agregar el path aunque sea mas trabajoso.
Responder Con Cita
  #10  
Antiguo 22-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.065
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por bosster_018 Ver Mensaje
Amigo Casimiro... Perdón quise decir: Moderador CasimiroNotevi
Sigo siendo casimiro


Cita:
Empezado por bosster_018 Ver Mensaje
USTEDES SON UNOS BENDITOS GENIOS
Genios, sí, aquí hay algunos genios, pero yo no, lo único que tengo es 24 años programando y el email de quien conoce las respuestas
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con aplicación MDI DrkMgc Varios 6 22-12-2008 20:26:39
Problema con aplicación Dark_RavenM Varios 4 27-02-2008 05:10:40
Problema con Aplicacion MDI Thales OOP 7 19-08-2005 15:31:07
Problema con mi aplicación JerS Varios 2 18-07-2005 16:33:51
Problema con aplicacion MDI wallesis OOP 5 03-01-2004 11:17:28


La franja horaria es GMT +2. Ahora son las 18:48:42.


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