Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
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
  #2  
Antiguo 13-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
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
  #3  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
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
  #4  
Antiguo 13-03-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.439
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
  #5  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Gracias Neftali , estoy tratando de aprender esto que es nuevo para mi, espero poder.
Saludos
Responder Con Cita
  #6  
Antiguo 13-03-2008
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 19
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
  #7  
Antiguo 13-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 00:43:00.


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
Copyright 1996-2007 Club Delphi