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 13-03-2008
jomanmoz jomanmoz is offline
Miembro
 
Registrado: ago 2006
Posts: 21
Poder: 0
jomanmoz Va por buen camino
Ejecucion de programas automatico

Necesito ejecutar un progragra que ralicé en delphi automaticamente al momento de iniciar windows.
Alguien me puede decir como puedo hacerlo?
Responder Con Cita
  #2  
Antiguo 13-03-2008
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,

Iniciar nuestra aplicación con Windows. (De los trucos del ClubDelphi)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Este truco sirve para que el programa arranque con windows.
Pregunto:
El programa arranca solo, osea no hace falta loguear ningún usuario?
Digamos que el ordenador tiene uno o varios usuarios.
Ejecuto el codigo del programa (esto lo tengo que hacer desde un usuario determinado).
Si apago y prendo el ordenador arrancara windows (solo, sin usuario)?, arranca el programa? independientemente del usuario que lo instalo en el registro?., Aunque no haya usuario logueado?
Me podríais explicar por favor.
Saludos
Responder Con Cita
  #4  
Antiguo 13-03-2008
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. Hasta donde yo llego, puedes utilizar la raíz del registro "LOCAL_MACHINE", para que el programa se ejecute al inicio de la sesión de usuario en Windows, para todos los usuarios. No sé si esto último sólo se puede hacer desde la cuenta de un usuario administrador. Si usamos la raíz del registro "CURRENT_USER", entonces el programa se ejecutaría para el usuario que hubiera iniciado sesión, repito, hasta donde yo llego.

Lo que sí ocurre es que el programa se ejecutará cuando el usuario inicie sesión. Para hacerlo antes, es preciso usar un servicio de Windows para el usuario correspondiente (SYSTEM), si no me equivoco. Y hasta ahí puedo leer.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muchas gracias Dec, me queda un poco mas claro.
Estoy tratando de estudiar un poco mas este tema, te agradezco el comentario.
He encontrado un componente que instala y verifica si hay registros en windows, por supuesto tengo que ver si lo entiendo en eso estoy.
Que problema esto de la programación, nunca se termina de aprender.
Saludos
Responder Con Cita
  #6  
Antiguo 13-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A ver si con una imagen queda mnás claro...
imagen

En windows todavía hay tres sistema para ejecutar un programa al inicio; Registro, Startup folders y Win.INI (sí este todavía funciona )

Para Startup Folders y Registro hay los diferentes usuarios como bien ha explicado David.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias Neftali , estoy tratando de aprender esto que es nuevo para mi, espero poder.
Saludos
Responder Con Cita
  #8  
Antiguo 13-03-2008
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Hola.... abran notepad y pegen esto:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"notepad.exe"="C:\\WINDOWS\\notepad.exe"

luego lo guardan con extencion Reg... esto escrive directamente en el reg edit
hay otras cadenas que pueden servir como la de windows nt Shell ... bueno en fin aqui sola hay que modificar el path y el nombre del exe ,,, luego de que guarden el archivo con la extencion reg solo lo abren y listo...
Responder Con Cita
  #9  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Una duda que se me presenta:
Usando un codigo que trabaja con un componente he podido hacer que el programa se instale en el startub (inicio) de windows.
Metiéndome (en camisa de once varas) en el msconfig, esta el programa en la ultima paleta (startub).
Es programa lo que usa es la variable (creo que es asi) TRegistry y HKEY_LOCAL_MACHINE.
Pero como dije lo que hace es instalar el programa en el inicio de windows, osea que si algun usuario se loguea, el programa arrancara independientemente del que sea.
Bueno, mi duda:
El ordenador que tengo lo uso de servidor, osea no se loguea nadie.
Cuando arranca simplemente se queda asi y se puede acceder a el desde la red.
Me han dicho que la manera de hacerlo es colocando el programa como un servicio.
Pregunto:
Para colocar el programa como un servicio se puede hacer como con este (TRegistry).?
Se usa el mismo pero de otra manera?
Hay otra forma de hacer que sea servicio?.
Por favor me ayudáis.
Saludos

Este es el componente:
Código Delphi [-]
unit BootExec;

interface 
 
uses 
  Classes,Windows,SysUtils,Registry;
 
type 
  TBootExec = class(TComponent)
 
  Private
     NombreClave : String;
     NombreExec  : String;
     ProximaVez  : Boolean;
     Usuario     : Boolean;
 
  Protected
 
  Public
    constructor Create(AOwner: TComponent); override;
    function AppInReg  : Boolean;
    function AddAppReg : Boolean;
    function DelAppReg : Boolean;
 
  Published
    Property NombrePrograma : string 
             Read NombreClave
             Write NombreClave;
    Property NombreEjecutable : string 
             Read NombreExec
             Write NombreExec;
    Property SoloUnaVez : Boolean
             Read ProximaVez
             Write ProximaVez;
    Property SoloUsuario : Boolean
             Read Usuario
             Write Usuario;
  end; 
 
procedure Register;
 
implementation 
 
{==============================================================================}
constructor TBootExec.Create(AOwner: TComponent);
 
begin 
  Inherited;
  AddAppReg;
end; 
 
{==============================================================================}
function TBootExec.AppInReg : Boolean;
 
var 
  Reg      : TRegistry;
  RegInfo  : TRegDataInfo;
  Clave    : String;
  Valores  : TStringList;
  I        : Integer;
 
begin 
  Result:=False;//No está en el Registro
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  if ProximaVez then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Not(Reg.KeyExists(Clave)) Then//comprobar prexistencia de clave
    begin 
       Reg.Free;
       Exit;
    end; 
  Reg.OpenKey(Clave,False);//existe, por tanto podemos abrirla.
  Valores := TStringList.Create;
  Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
  for I:=0 to (Valores.Count-1) do 
    begin 
      if Reg.GetDataInfo( Valores[i], RegInfo) then 
        begin 
          if (RegInfo.RegData = rdString) then 
            begin 
              if Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) then 
                begin 
                 Result:=True;
                 Break;
                end; 
            end; 
        end 
       else 
         Valores[i]:='';
    End;//For
  Valores.Free;
  Reg.Free;
end; 
 
{==============================================================================}
function TBootExec.AddAppReg : Boolean;
 
var 
  Reg   : TRegistry;
  Clave : string;
 
begin 
  Result:=False;
  if (NombreClave='') or (NombreExec='') then 
    Exit;
  if AppInReg then 
    Exit;
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  if ProximaVez then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Not(Reg.KeyExists(Clave)) then 
    begin 
       Reg.Free;
       Exit;
    end; 
  Reg.OpenKey(Clave,False);
  Reg.WriteString(NombreClave,NombreExec);
  Reg.Free;
  Result:=True;
end; 
 
{==============================================================================}
function TBootExec.DelAppReg : Boolean;
 
var 
  Reg     : TRegistry;
  RegInfo : TRegDataInfo;
  Clave   : string;
  Valores : TStringList;
  I       : integer;
 
begin 
  Result:=False;
  if Not(AppInReg) then 
    Exit;
  if (NombreClave='') or (NombreExec='') then 
    Exit;
  Clave:='Software\Microsoft\Windows\CurrentVersion\Run';
  if ProximaVez then Clave := Clave+'Once';
  Reg:=TRegistry.Create;
  if Not(Usuario) then Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Not(Reg.KeyExists(Clave)) then 
    begin 
       Reg.Free;
       Exit;
    end; 
  Reg.OpenKey(Clave,False);
  Valores := TStringList.Create;
  Reg.GetValueNames(Valores);//Obtenemos una lista de los Nombres de los valores de la clave
  for I:=0 to (Valores.Count-1) do 
    begin 
      if Reg.GetDataInfo( Valores[i], RegInfo) then 
        begin 
          if (RegInfo.RegData = rdString) then 
            begin 
              if Lowercase(NombreExec)=LowerCase( Reg.ReadString(Valores[i]) ) then 
                begin 
                  Reg.DeleteValue( Valores[i] );
                  Result:=True;
                end; 
            end; 
        end; 
    end; 
  Valores.Free;
  Reg.Free;
end; 
 
{==============================================================================}
procedure Register;
 
begin 
  RegisterComponents('LabGalia', [TBootExec]);
end; 
 
{==============================================================================}
END.

Asi grabo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   BootExec1.NombrePrograma:='Programa Hola';
   BootExec1.NombreEjecutable:='C:\Hola\Hola.exe';
   BootExec1.SoloUnaVez:=False;{queremos que se ejecute siempre}
   BootExec1.SoloUsuario:=False;{que se ejecute con cualquier usuario}
if BootExec1.AddAppReg then
   ShowMessage('Ok, se ha instalado correctamente')
  else 
   ShowMessage('NO, Error en la instalación, posiblemente ya esté instalado...');

end;
Y asi lo elimino de windows:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
begin
     BootExec1.NombrePrograma:='Programa Hola';
     BootExec1.NombreEjecutable:='C:\Hola\Hola.exe';
     BootExec1.SoloUnaVez:=False;{queremos que se ejecute siempre}
     BootExec1.SoloUsuario:=False;{que se ejecute con cualquier usuario}

if BootExec1.DelAppReg then
   ShowMessage('Ok, se ha Desinstalado correctamente')
  else 
   ShowMessage('NO, Error en la Desinstalación, posiblemente ya fuese desinstalado...'); 
 

end;
Responder Con Cita
  #10  
Antiguo 19-04-2008
QMartinez QMartinez is offline
Registrado
 
Registrado: ene 2004
Ubicación: Querétaro, Qro., México
Posts: 5
Poder: 0
QMartinez Va por buen camino
Tal vez te sea de utilidad que Windows arranque en automático con un usuario predeterminado. De esta manera no sale la ventana de dialogo donde se tiene que ingresar usuario y password.


Abre el registro de Windows (con REGEDIT.EXE de Windows)

Abre WinLogon del registro de Windows, se encuentra en:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Hay 3 valores que nos interesan, las cuales permiten arrancar Windows con un usuario predeterminado.

DefaultUserName = User // Usuario con que se firmara
AutoAdimLogon = 1 //(Coloca un valor de "uno" para arranque automático, “cero” para que no arrancar en automático)
DefaultPassword = Password //Password con que se firmara el usuario al PC

Es probable que no existan los valores AutoAdminLogon y DefaultPasswod. Tendrás que crearlas como nuevo valor alfanumérico.


Ya ingresado el usuario, se ejecutan las aplicacion definidas en Startuo

Espero que esto sea de utilidad.
Responder Con Cita
  #11  
Antiguo 20-04-2008
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
¿Alguien sabe como se podría iniciar un proceso al arrancar windows como un proceso de sistema? En el taskmanager hay procesos que corren bajo el nombre de usuario System.

Salu2
Responder Con Cita
  #12  
Antiguo 22-04-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
saludos!
esto creo que se ha tratado en varias ocaciones en el Club, creo que sería conveniente que hagas una pequeña búsqueda, ¿que crees?
Responder Con Cita
  #13  
Antiguo 22-04-2008
AXONIDS AXONIDS is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
AXONIDS Va por buen camino
Hola, necesito que mi aplicación arranque junto con windows
tengo claro la diferencia entre colocarla en el registro y como servicio.

Con el registro mi aplicación arranca de forma correcta cuando el usuario se logea e inicia sesión. Lo tengo de forma que se arranque para cualquier usuario.

Pero lo que necesito es que sea un servicio para que se inicie antes, para que esté activa cuando esta la pantalla de inicio de sesión y aun no se haya logeado nadie.
He creado un servicio para la aplicación, la aplicación arranca pero al poco se detiene.
Si la intento iniciar yo manualmente en la consola de servicios me da el error:
"1053 El servicio no ha respondido a la petición o inicio del control en un tiempo adecuado."
trancurrido un breve periodo de tiempo en el que la aplicación está empezando a funcionar se vuelve a detener.


Necesito ayuda para saber como solucionarlo, gracias.
He estado mirando por el foro pero no encuentro una solucción para lo mio.

Un saludo.
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
Prohibir ejecución de programas Novás Windows 1 10-09-2007 19:25:58
Backup automático en SQL solram SQL 5 13-06-2007 20:18:30
Alerta en ejecucion de programas knife_sj Varios 33 25-02-2007 21:54:54
Identificador de programas en ejecución Josue API de Windows 6 31-12-2006 21:15:51
Ayuda con Ejecución de programas creados con Kylix 3 Enterprise Trial darkone2k3 Lazarus, FreePascal, Kylix, etc. 0 18-11-2003 15:58:56


La franja horaria es GMT +2. Ahora son las 11:01:44.


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