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

Soyez le premier à donner votre avis sur cette source.

Vue 12 553 fois - Téléchargée 1 249 fois

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

Ajouter un commentaire

Commentaire

michelroc
Messages postés
84
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
2 janvier 2010

Bonjour,
Je me suis servi de votre code pour lancer un fichier.
Je comprends pas pourquoi quand je lance le fichier a partir Programme\demarrage mon fichier s'execute correctement alors que si j'utilise votre fichier cela ne fonctionne pas. Voyez vous ou je fais une erreur. Merci

Votre code que j'ai Adapté
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry;
Valeur : String;
Nom : String;
begin
Nom := 'Activation_Veille_Ecran';
Valeur := 'C:\Windows\System32\RM_MARCHE_MEV.EXE';
Reg := TRegistry.Create; // création de l'objet Reg
with Reg do
begin
try
RootKey := HKEY_LOCAL_MACHINE; // clé racine
if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
begin // si cette clé existe...
WriteString(Nom, Valeur); // écrire
CloseKey; // on referme, suite à OpenKey
end;
finally
Free; // libération de l'objet Reg
end;
end;
end;

La clé est bien crée :

Mon code:

program MR_MARCHE_MEV;
{$APPTYPE CONSOLE}
uses
SysUtils, ShellApi, Windows;
begin
// Temps avant mise en veille de l'cran
SystemparametersInfo(SPI_SETSCREENSAVETIMEOUT,15,nil,SPIF_SENDWININICHANGE);
// Active Ecomomiseur ecran 1 0 desactive
SystemparametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,SPIF_SENDWININICHANGE);
// Temps avant extinction Ecran 0 = Jamais
SystemparametersInfo(SPI_SETPOWEROFFTIMEOUT,30,nil,SPIF_SENDWININICHANGE);
// Active Extiction Ecran =0 desactive
SystemparametersInfo(SPI_SETPOWEROFFACTIVE,1,nil,SPIF_SENDWININICHANGE);
Halt;
end.

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.