NEO ::: TEAM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

NEO ::: TEAM

New Evolution Owner
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Machine à café dosette Philips SENSEO Original + 200 dosettes ...
49.99 €
Voir le deal

 

 Comment n'instancier qu'une seule fois un programme ?

Aller en bas 
AuteurMessage
Admin
Fondateur
Fondateur
Admin


Nombre de messages : 197
Age : 40
Localisation : Tlemcen ( Algérie )
Date d'inscription : 04/12/2006

Comment n'instancier qu'une seule fois un programme ? Empty
MessageSujet: Comment n'instancier qu'une seule fois un programme ?   Comment n'instancier qu'une seule fois un programme ? Icon_minitimeVen 12 Jan - 5:57

Il existe de nombreuses méthodes pour n'autoriser qu'une seule instance d'un même programme. La plus élégante étant sans aucun doute l'utilisation des Mutex.
Les Mutex sont en fait des variables globales qui génèrent un message d'erreur lorsque l'on tente de les instancier alors que cela a déjà été fait. Pour interdire de lancer 2 fois une même application, il suffit donc de tester si une erreur est produite lors de la création d'un Mutex pour notre application. Cela se fait dès le lancement de l'application, c'est à dire dans le code de base du projet accessible par le menu Projet|Voir la source.



Code:




program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Toutes les fonctions relatives aux Mutex se trouvant dans l'unité Windows, il est donc nécessaire de l'ajouter dans la clause uses.
Afin d'être totalement sûr qu'une autre erreur ne vienne perturber le lancement de notre programme, il est préférable d'effacer toute trace de la dernière erreur survenue dans le système. On utilise pour cela la commande SetLastError(NO_ERROR). Il est à présent temps de créer le Mutex pour l'application. On utilise pour ce faire la commande CreateMutex(lpMutexAttributes: PSecurityAttributes, bInitialOwner: LongBool, lpName: PChar): Cardinal où les paramètres correspondent respectivement aux attributs de sécurité du Mutex, au thread qui en est le propriétaire et au nom du Mutex. Si le Mutex existe déjà, l'erreur ERROR_ALREADY_EXISTS sera alors déclenchée. Il faut donc tester la dernière erreur intervenue dans le système et lancer ou non une instance de l'application.


Code:




program Project1;

uses
  Windows, Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}
var
   H : HANDLE;
begin
  SetLastError(NO_ERROR);
  H := CreateMutex (nil, False, 'Nom de l application');
  if GetLastError = ERROR_ALREADY_EXISTS
    then Exit;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  CloseHandle(H);
end.
Revenir en haut Aller en bas
https://neo-team.forumactif.com
 
Comment n'instancier qu'une seule fois un programme ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment lancer un programme sous un autre contexte de securi
» Comment imposer une pause au programme ?
» Comment utiliser un programme externe via l'EDI ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NEO ::: TEAM :: Informatique :: Les RADs :: Borland Delphi 4,5,6,7-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser