IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

1 instance : oui, 2 instances: bonjour les dégats


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut 1 instance : oui, 2 instances: bonjour les dégats
    Bonjour,

    J'aimerais empêcher mon appli d'être lancée plusieurs fois par erreur par l'utilisateur.
    J'ai bien trouvé ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    program Project1;
     
    uses
      Windows, Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.RES}
     
    var H : THANDLE;
     
    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.

    mais cela ne marche pas, en fait cela ne fait rien.
    Quelqu'un aurait-il la solution ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    en fait cela ne fait rien.
    Peux-tu être plus explicite ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 409
    Par défaut
    essayes comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SetLastError(NO_ERROR);
     H := CreateMutex (nil, True, pChar (Uppercase (ExtractFileName (Application.ExeName))));
    if (H = 0) or (GetLastError = error_Already_Exists) then Application.Terminate ;
    try
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    finally
      ReleaseMutex (H);
    end;

  4. #4
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Si tu crées le Mutex, et que tu le détruit dè que ton programme est lancé, ça va pas le faire...

    Edit : grilled by exoseven

  5. #5
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut
    essayes comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SetLastError(NO_ERROR);
     H := CreateMutex (nil, True, pChar (Uppercase (ExtractFileName (Application.ExeName))));
    if (H = 0) or (GetLastError = error_Already_Exists) then Application.Terminate ;
    try
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    finally
      ReleaseMutex (H);
    end;
    Ben... maintenant ça coupe dès la première instance.
    Poutant H <> 0.

    et les balises QUOTE aussi pour citer

  6. #6
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut
    Citation Envoyé par waskol
    Si tu crées le Mutex, et que tu le détruit dè que ton programme est lancé, ça va pas le faire...

    Edit : grilled by exoseven
    On a plus besoin du Mutex après que l'appli ait démarré.

  7. #7
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par od.dev
    On a plus besoin du Mutex après que l'appli ait démarré.
    Ben si justement, c'est son existence en mémoire qui indique à la seconde instance qu'une première tourne déjà...

  8. #8
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut
    Citation Envoyé par waskol
    Ben si justement, c'est son existence en mémoire qui indique à la seconde instance qu'une première tourne déjà...
    Ah bon d'accord, je n'avais pas compris ça avec les exemples que j'avais trouvé.
    Je vais essayer.

    Merci.

  9. #9
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut
    Citation Envoyé par waskol
    Ben si justement, c'est son existence en mémoire qui indique à la seconde instance qu'une première tourne déjà...
    Ok, effectivement ça marche très bien en gardant le Mutex.
    Par contre j'ai du mettre le nom de l'appli en dur à la place de "pChar (Uppercase (ExtractFileName (Application.ExeName)))", sinon il coupe systématiquement bien que H > 0.

    Merci à tous.

  10. #10
    Inactif
    Homme Profil pro
    Analyste-programmeur Delphi
    Inscrit en
    Décembre 2003
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-programmeur Delphi

    Informations forums :
    Inscription : Décembre 2003
    Messages : 490
    Par défaut
    Citation Envoyé par qi130
    Peux-tu être plus explicite ?
    Pas facile, le logiciel se comporte comme avant d'inserrer le code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2010] PST, un ça va, cinq bonjour les dégats
    Par Yepazix dans le forum Outlook
    Réponses: 0
    Dernier message: 12/07/2010, 00h53
  2. [RegEx] un espace ça va deux espaces bonjour les dégats
    Par SpaceFrog dans le forum Langage
    Réponses: 8
    Dernier message: 12/06/2008, 17h43
  3. 2 tables ca va, 3 tables, bonjour les dégats
    Par crazykangourou dans le forum Oracle
    Réponses: 29
    Dernier message: 06/12/2006, 09h02
  4. Réponses: 5
    Dernier message: 13/07/2006, 09h44
  5. Réponses: 9
    Dernier message: 17/02/2005, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo