Lancement d'une appli à chaque démarrage en utilisant la bdr - exemple

Description

A partir d'un exemple simple, comment inscrire son application dans la Base de Registre afin qu'elle se lance automatiquement à chaque démarrage de Windows.

Si l'option est cochée, cette "application" se lance à chaque démarrage de Windows.
Emplacement dans la Base de Registre :
HKEY_LOCAL_MACHINE
\Software\Microsoft\Windows\CurrentVersion\Run
Nom: LanceAuto
Données: CheminAppli\Project1.exe

N-B: il suffit de décocher la CheckBox pour effacer l'inscription dans la BDR.

Pour les inquiets:
(ben oui, la Base de registre, quand même...)

Ce programme est testé plusieurs fois par jour, depuis des mois, puisqu'il se lance (ou pas) à chaque démarrage de ma machine.
Il est fiable de par sa simplicité, robuste (blocs try...finally), et de toute manière n'inscrira ou n'effacera rien s'il ne trouve pas la Valeur ou la Clé correspondante dans la BDR.

D'une manière générale, il est conseillé d'effectuer une sauvegarde de sa Base de registre avant toute manipulation hasardeuse...

_____________________________

Commentaire sur les méthodes:

"procedure TForm1.LancerAuDemarrage(Inscrire: Boolean);"
- si Inscrire := True, inscription dans la BdR,
- si Inscrire := False, effacement de la Bdr.

"function TForm1.EstInscritDansBDR: Boolean;"
- retourne True si inscrit,
- retourne False si non inscrit dans la Bdr.

J'ai préféré affecter "Nom", "Valeur" en variables globales, mais il est envisageable de les utiliser localement dans les méthodes (modifiées en conséquence), et de les passer en paramètres, par exemple:

"procedure LancerAuDemarrage(Nom, Valeur: String; Inscrire: Boolean);"

"function EstInscritDansBDR(Nom, Valeur: String): Boolean;"

Source / Exemple :


Exemple dans le zip, avec commentaires.

__________________

Code non commenté:
__________________

var Nom, Valeur: String;

uses Registry;

{ True: Incription dans la BDR, False: Effacement de la BDR  }
procedure TForm1.LancerAuDemarrage(Inscrire: Boolean);
var Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  with Reg do
  begin
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
      begin
        if Inscrire then WriteString(Nom, Valeur)
        else DeleteValue(Nom);
        CloseKey;
      end;
    finally
      Free;
    end;
  end;
end;

{ Vérification de l'inscription dans la Base de Registre }
function TForm1.EstInscritDansBDR: Boolean;
var Reg: TRegistry;
begin
  Result := False;
  Reg := TRegistry.Create;
  with Reg do
  begin
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
        if ReadString(Nom) = Valeur then
          Result := True;
      CloseKey;
    finally
      Free;
    end;
  end;
end;

procedure TForm1.CBLanceAutoClick(Sender: TObject);
begin
  LancerAuDemarrage(CBLanceAuto.Checked);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Nom := Application.Title;
  Valeur := ExtractShortPathName(Application.ExeName);
  CBLanceAuto.Checked := EstInscritDansBDR;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if EstInscritDansBDR then
    ShowMessage(
    'L''inscription dans la Base de Registre est effective.' + #13 +
    'Cette fenêtre apparaîtra à chaque démarrage de Windows')
  else
    ShowMessage(
    'Il n''y a pas d''inscription dans la Base de Registre.' + #13 +
    'Cette fenêtre n''apparaîtra pas au démarrage de Windows');
end;

Conclusion :


Un code a été récemment publié sur le sujet, j'ai donc hésité à envoyer celui-ci.
Mais comme je l'ai exprimé à son auteur, l'approche est ici un peu différente et complémentaire. Alors...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.