Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Thumbs up Detectar si windows ejecuto mi aplicacion al Iniciar el Sistema

Hola amigos...

Tengo un pequeño porblemita, resulta que cargo mi aplicacion al iniciar windows( la cargo en el registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run ) y quisiera detectar si mi aplicacion ha sido cargada por windows o fue ejecutada, manualmente, por un usuario(por ej con un DobleClick)... muchas gracias..
Responder Con Cita
  #2  
Antiguo 09-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
La forma mas sencilla que se me ocurre, es que cuando registras tu aplicación en el registro, le pongas un parámetro y evalues si esta ese parámetro para saber en que momento se cargó.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 09-01-2007
genius genius is offline
Miembro
 
Registrado: may 2006
Posts: 38
Poder: 0
genius Va por buen camino
Red face

la mas sencillita

Hwndd := FindWindow(nil, 'Caption de tu aplicativo');

if Hwndd <> 0 then
Estoy arriba loko..
Responder Con Cita
  #4  
Antiguo 09-01-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
En la clave de registro añades un parámetro, considerando que el usuario no va a pasar ningún parámetro...
¿ como ?
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 09-01-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Question

mmm... No he logrado darle solución a mi problemita, pense en utilizar un Parametro, en el registro de Windows, de la siguiente manera :

IF Parametro = 1 THEN
BEGIN
{ Aplicación ejecutada por Windows }
Parametro:=2;
END
ELSE { Aplicación ejecutada "Manualmente" }

el problema es que el paremetro siempre tendria valor 2, a no ser que lo actualizara en 1 cuando windows cerrara la sesión..
Responder Con Cita
  #6  
Antiguo 09-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por BuenaOnda
mmm... No he logrado darle solución a mi problemita, pense en utilizar un Parametro, en el registro de Windows, de la siguiente manera :

IF Parametro = 1 THEN
BEGIN
{ Aplicación ejecutada por Windows }
Parametro:=2;
END
ELSE { Aplicación ejecutada "Manualmente" }

el problema es que el paremetro siempre tendria valor 2, a no ser que lo actualizara en 1 cuando windows cerrara la sesión..
Yo me refería a que agregues un parámetro en la línea de comandos, por ejemplo:
Cita:
miaplicacion.exe -runstart
Y desde código evalúes:
Código Delphi [-]
  if FindCmdLineSwitch('runstart') then
    { Lo ejecutó windows}

Cita:
Empezado por genius
la mas sencillita

Hwndd := FindWindow(nil, 'Caption de tu aplicativo');

if Hwndd <> 0 then
Estoy arriba loko..
No di una posibilidad similar (para ese caso crearía un semáforo), porque cabía la posibilidad que la aplicación aún no se encuentre en ejecución!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 09-01-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Question

me gusta la idea, pero como puedo realizar esto ..

-----------------------------------------------------------------------
Yo me refería a que agregues un parámetro en la línea de comandos, por ejemplo:

Cita:
miaplicacion.exe -runstart
Y desde código evalúes:
Código Delphi [-] if FindCmdLineSwitch('runstart') then { Lo ejecutó windows}
------------------------------------------------------------------------

disculpa tantas preguntas y Muchas gracias por tu ayuda...
Responder Con Cita
  #8  
Antiguo 09-01-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por BuenaOnda
me gusta la idea, pero como puedo realizar esto ..
Peroooo... ¡Te lo di casi todo resuelto!

Aca te paso un ejemplo con un parámetro para que se instale, y veas como es que se registra:
Código Delphi [-]
program Project1;

uses
  Windows, SysUtils, Registry, Dialogs;

begin
  if FindCmdLineSwitch('install') then
    with TRegistry.Create do
      try
        RootKey := HKEY_LOCAL_MACHINE;
        if OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False) then
          try
            WriteString(ExtractFileName(ParamStr(0)), ParamStr(0) + ' -runstart');
          finally
            CloseKey;
          end;
      finally
        Free;
      end
  else if FindCmdLineSwitch('runstart') then
    ShowMessage('Aplicación iniciada por Windows')

  else
    ShowMessage('Aplicación iniciada manualmente');

end.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 10-01-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Unhappy

mmm.. hice todo lo que me dijiste delphi.com.ar pero no me funciona, tengo una confución en esta línea de código :

if FindCmdLineSwitch('install')then

else if FindCmdLineSwitch('runstart') then
ShowMessage('Aplicación iniciada por Windows')
else
ShowMessage('Aplicación iniciada manualmente');

lo que pasa es que solo se ejecute el else de la sentencia If/Then..
Responder Con Cita
  #10  
Antiguo 10-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver. Tienes que centrarte en una sola cosa: cuando escribas la clave en el Registro de Windows para que tu aplicación se inicie junto al sistema operativo, a la ruta de tu programa, añádele un parámetro "-runstart", por ejemplo, o con cualquier otro nombre.

¿Porque lo que es claro es que desde tu aplicación se añade la clave de marras en el Registro de Windows? ¿Verdad? O lo haces desde el programa de instalación, o como sea, pero, tienes que hacerlo: es una clave que no viene en el sistema, que es de tú sistema y eres tú quien la añade al Registro de Windows.

Pues bien, como se ha dicho, al hacerlo, al añadir la clave en el Registro de Windows, añade a la ruta de tu programa (que tienes que indicar para que Windows sepa dónde está el programa que ha de ejecutar al inicio del sistema) el parámetro de marras: sea "-runstart" o cualquier otro: el nombre lo eliges tú.

Una vez tengas eso... lo único que tienes que hacer es fijarte en el inicio de tu aplicación si existe dicho parámetro, y, si es que existe, ya sabrás que el programa se inició "por Windows" al iniciar el sistema, y no por ningún usuario que hiciera "doble clic" en el ejecutable, puesto que al hacer esto último no se le pasaría parámetro alguno a tu programa.

Resumiendo:

1º Céntrate en la clave en el Registro de Windows que escribes para que tu programa se ejecute al inicio del sistema: añade a la ruta del programa a ejecutar un parámetro, tal y como arriba te muestra Federico:

Código Delphi [-]
WriteString(ExtractFileName(ParamStr(0)), ParamStr(0) + ' -runstart');

2º Cuando tu programa se inicie (por ejemplo, puedes aprovechar el evento "OnCreate" del formulario principal de la aplicación) mira a ver si encuentras el parámetro "-runstart" (en este caso, ya digo que el nombre lo pones tú y puedes poner el que quieras y estimes oportuno).

3º Lo demás es sencillo:

Código Delphi [-]
// Si se le pasa el parámetro "runstart" a tu programa...
if FindCmdLineSwitch('runstart') then
  ShowMessage('Tu programa lo inició Windows siguiendo el registro')
// En caso contrario...
else
  ShowMessage('Tu programa no lo inició Windows sino algún usuario');

Sin embargo, ten en cuenta una cosa. Si lo que tratas de dilucidar a partir de todo esto es algo importante para tu programa, has de saber que sería muy sencillo para cualquier crear un acceso directo a tu programa, de tal manera que incluya en el mismo el parámetro "-runstart"...

Si un usuario hace conseguirá engañar a tu sistema, es decir, el sistema pensará (y obrará) como si lo hubiera iniciado Windows, pero, no lo habrá iniciado Windows sino un usuario "algo avispado"...

No sé. Tal vez podría dársele alguna que otra vuelta a esto. Cualquier comentario que tengas no te lo guardes a ver si entre todos podemos llegar a algún lugar.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 10-01-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Talking super..!!

eso era.. muchas gracias a todos amigos por ayudarme y darse el tiempo de contestarme.
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
Intraweb, Como ejecuto una aplicacion tulio Internet 13 21-03-2018 22:50:30
Ejecutar aplicación al iniciar Windows nesetru Varios 5 10-02-2004 09:09:56
Como iniciar mi sistema, al inciar Windows thecarlos Varios 1 16-01-2004 00:11:38
Iniciar tu aplicacion al arancar windows JaMFrY Varios 4 05-01-2004 17:24:43
Como ejecuto una aplicacion externa a D5 kia Varios 3 25-08-2003 23:12:10


La franja horaria es GMT +2. Ahora son las 03:01:59.


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