PDA

Ver la Versión Completa : Cargar aplicación al inicio de Windows


Drakyto
30-07-2010, 21:13:19
Espero este hilo esté ubicado en el lugar correcto.

Quisiera saber si hay alguna manera fácil de cargar mi aplicación en Delphi cuando se inicia windows.

Gracias de antemano.

Caral
30-07-2010, 21:15:57
Hola
Lo mas facil es colocar un acceso directo al exe en el directorio de inicio de windows.
Saludos

delphi.com.ar
30-07-2010, 21:17:06
http://www.clubdelphi.com/foros/showpost.php?p=29186&postcount=2


Saludos!

bosster_018
31-07-2010, 03:07:52
Concuerdo con lo que te dijo Delphi.com.ar y para aumentar un poco la respuesta... Puedes anotar tu programa en el inicio del registro de Windows XP (ojo: sólo Windows XP, debes averiguar en Windows Vista y 7)

Aquí tengo un pequeño ejemplo que lo vi hace tiempo en el clubDelphi y que lo tengo guardado en mi carpetita de "Ejemplos Delphi" (uno puede necesitar estos ejemplos algún día :rolleyes:)

Primero coloca un CheckBox en tu formulario, luego crea un procedimiento para escribir en el registro de Windows Xp.
Luego agrega "Registry" en las Uses de la unidad

Uses
Registry;

Y escribes el código

//Lee y escribe en el Registro de Windows Xp
procedure TForm1.Regedit(run:byte; Nombre:string);
var
Registro:TRegistry;
begin
Registro:=TRegistry.create;
Registro.RootKey:=HKEY_LOCAL_MACHINE;
case run of
1: if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then
Registro.WriteString(Nombre, ParamStr(0));
0: if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then
Registro.DeleteValue(Nombre);
end;
Registro.Destroy;
end;

Después en el CheckBox realizas la llamada al procedimiento:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
Regedit(1, 'NombrePrograma')
else
Regedit(0, 'NombrePrograma');
end;

Donde el valor de "1" sirve para escribir en el registro el autoinicio de tu programa al encender Windows Xp.
Y el valor "0" borra el registro añadido por el programa (desactiva)

Si quieres hacer un programa donde el Usuario controle el autoinicio de tu programa (active y desactive) puedes agregar otro procedimiento para que el programa (checkBox) "averigüe" si ya está escrito el autoinicio en el Registro de Windows Xp.

Con este procedimiento hará que tu checkBox esté marcado si ya existe el registro, si no el checkBox estará desmarcado:

procedure TForm1.AveriguarInicio(nombre:string);
var
Registro : TRegistry;
begin
Registro:=TRegistry.create;
Registro.RootKey:=HKEY_LOCAL_MACHINE;
Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);

if Registro.ValueExists(nombre)= true then
CheckBox1.Checked:= true
else
CheckBox1.Checked:= false;

Registro.Destroy;
end;

Y en el FormCreate haces la llamada al procedimiento:

procedure TForm1.FormCreate(Sender: TObject);
begin
AveriguarInicio('NombrePrograma');
end;

Creo que me salió muy larga mi respuesta :p
¡Seguro que nadie lo leerá!

Saludos!

Lord Delfos
31-07-2010, 16:27:53
Honestamente, creo que la mejor manera es también la más básica, que es poner un acceso directo en Menú Inicio > Inicio del usuario.

Esto es por tres cosas.

1) El usuario sabe qué se está corriendo al inicio.
2) Es fácil de borrar.
3) No te metés con el registry, cosa que puede ser peligrosa si uno no tiene cuidado.

Es uno opinión, nada más.



uses ShlObj, ComObj, ActiveX;

function RutaCarpetaEspecial(Carpeta: Cardinal): string;
var path: array [0..MAX_PATH] of char;
begin
ShGetSpecialFolderPath(0,@path[0],Carpeta,false(*true crea la carpeta *)) ;
Result:= path;
end;


//Sacado de Trucomanía: www.trucomania.org/trucomania
procedure CreaLnk(Exe, Argumentos, DirTrabajo, NombreLnk, DirDestino: string);
var Objeto: IUnknown;
UnSlink: IShellLink;
FicheroP: IPersistFile;
WFichero: WideString;
begin
Objeto := CreateComObject(CLSID_ShellLink);
UnSlink := Objeto as IShellLink;
FicheroP := Objeto as IPersistFile;
with UnSlink do
begin
SetArguments( PChar(Argumentos) );
SetPath( PChar(Exe) );
SetWorkingDirectory( PChar(DirTrabajo) );
end;
WFichero := DirDestino + '\' + NombreLnk + '.lnk';
FicheroP.Save(PWChar(WFichero),False);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
CreaLnk( Application.ExeName,
'',
ExtractFilePath(Application.ExeName),
'Mi programa',
RutaCarpetaEspecial(CSIDL_STARTUP));
end;