Créer clé dans base de registre [Résolu]

Signaler
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
salut à vous,
Alors voilà j'ai un logiciel et j'aimerai qu'il se lance au démarage de windows.
Trés facile je pourrais créer un clé direct dans le registre, mais j'aimerai en faite que quand on lance mon logiciel.exe sa créer cette clé et qu'au prochain lancemement il se lance seul donc je voullais utiliser le code suivant:

procedure EnregistetrayIcons(nom, chemin : string);
Var Registre : TRegistry;
begin
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    Registre.RootKey:=HKEY_LOCAL_MACHINE; //Définit la clé principale
    Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',True);
    Registre.WriteString(nom, chemin); //Ecrit dans la base de registres
    Registre.CloseKey; //Ferme la clé
    Registre.Free; //Détruit l'objet
end;


Mais sa ne fonctionne pas :/
Help

24 réponses

Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
Je retire ce que je viens de dire j'ai réussi!

Ton logiciel était pas mal complet en faite ^^

Merci à toi, et peut être a bientôt :D
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Bonjour,

Voir mon source "PostitForEver"


cantador
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
Bravo pour ton truc c'est sympas ^^
Par j'ai pris ce que je voulais mais je ne comprend pas ce qu'est ton "DmarrageavecWindows1.Checked" ???
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
si j'ai bien bossé (houps..)
cette fonction permet de lancer l'application au démarrage de windows..
en clair, tu dois voir l'icône dans la barre de
tray à droite


cantador
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Salut,

sinon il y avait aussi ce snippet


[hr]@+Cirec
[hr]
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
"Mais sa ne fonctionne pas :/ "
ça fait quoi ? message d'erreur ? plantage PC ? formatage du d: automatique ?
merci de donner des détails.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
formatage du d: automatique ?
julio a mangé trop de chorizo...

cantador
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
[i]D'accord mais moi j'ai fait aussi un fichier résident donc j'ai aussi l'icone qui se mets en bas mais comment je peut remplacer ton "DmarrageavecWindows1.Checked"

Mon script:

procedure TForm1.FormCreate(Sender: TObject);
Var F: TextFile;
    Reg : TRegistry;
begin
     tray.cbSize:=sizeof(tray);
     tray.wnd:=handle;
     tray.uID:=1;
     tray.UCallbackMessage:=wm_AppelMessage;
     tray.hIcon:=Application.Icon.handle; //Choix de l'icone
     tray.szTip:='Détail'; //Choix du message
     tray.uFlags:=nif_message or nif_icon or nif_tip;
     Shell_NotifyIcon(Nim_ADD,@tray);


// démarrage avec windows
  Reg := TRegistry.Create;
  with Reg do
  begin
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
      begin
        WriteString('MODEM', chemin + 'Project1wa.exe');
        CloseKey;
      end;
    finally
      Free;
    end;
  end;
  LancerAuDemarrage(DmarrageavecWindows1.Checked);
end;


procedure TForm1.WMAppelMessage(var msg : TMessage);
Var Curs:TPoint;
begin
//Clique gauche de la souris
    if msg.LParam=Wm_RButtonDown then begin
       SetForegroundWindow(Handle);
       GetCursorPos(Curs); //Récupère les coordonnées de la souris
       PopupMenu1.Popup(Curs.X,Curs.Y); //Ouvre le menu surgissant à l'emplacement spécfié par les coordonnees de la souris
       PostMessage(Handle,WM_NULL,0,0);
    end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Shell_NotifyIcon(Nim_DELETE,@tray);
end;
 
procedure TForm1.Quitter1Click(Sender: TObject);
begin
  application.terminate;
  Shell_NotifyIcon(Nim_DELETE,@tray); 
end;


procedure TForm1.Ouvrirfichier1Click(Sender: TObject);
begin
Show;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin
  CanClose := FALSE;
  TForm(Sender).Visible:= false;

end;


end.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
D'où sort "chemin" ?
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
chemin tu le déclare avant implemtation

var
  Form1: TForm1;
  chemin: string;



implementation

{$R *.dfm}
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Et où est-il renseigné ?
je cherche un "Chemin:= ..."
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
LancerAuDemarrage(true);


cantador
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
Sa me met une erreur:

[Erreur] Unitwa.pas(44): Déclaration forward ou external non satisfaite : 'TForm1.LancerAuDemarrage'
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
ce code fonctionne à 200%
procedure TForm1.FormCreate(Sender: TObject);
begin
// démarrage avec windows
  with TRegistry.Create do
  begin
    try
      RootKey := HKEY_CURRENT_USER;
      if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then
      begin
        WriteString('MODEM', Application.ExeName);
        CloseKey;
      end;
    finally
      Free;
    end;
  end;
end;



[hr]@+Cirec
[hr]
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
mais le Snippet reste la meilleur option
il couvre toutes les possibilités [AllUsers/CurrentUser] & [Run/RunOnce]

Ex:
 if LancerAuDemarrage('Modem', False, False) then
  ShowMessage('Inscription réussit')
else
  ShowMessage('Echec de l''inscription');

[hr]@+Cirec
[hr]
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
En effet merci, maintenant dernier truc pour aujourd'hui:

Quand je lance mon logiciel, il se situe donc en bas a droit, mais si par exemple on le relance j'aimerai mettre un message d'alerte tel que: Attention logiciel déjà ouvert
Alors que la si je relance il me mets une grosse erreur Windows XD
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
Mutex, il existe un compo tout simple "UnPas2" (Lire 'Un pas Deux'), un conseil d'ergonomie : pas de popup intrusive, contente toi de ne pas relancer l'appli et de mettre la 1ere deja lancée au premier plan au pire.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
[Erreur] Unitwa.pas(44): Déclaration forward ou external non satisfaite : 'TForm1.LancerAuDemarrage'

Normal !

si tu ne mets pas tout le code, il va bien moins marcher

cantador
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
...et dans PostitForever, le souci de la relance intempestive de l'appli a été traitée également
voir le source-->> Mutex

cantador
Messages postés
102
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
27 juin 2011
1
En effet je viens de voir cela mais je n'est pas saisi comment tu as fait ?