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

Windows Forms Discussion :

[VB] Instance unique d'une application


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 162
    Points : 445
    Points
    445
    Par défaut [VB] Instance unique d'une application
    Bonjours, j'ai un petit problème dans la détection de mon application pour savoir si elle est déja lancé ou pas et si oui mettre le focus sur l'instance en cours.
    Pour le moment j'ai ca :


    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
    22
     
    Public Class MainForm
    Private Shared _singleton As MainForm
     
        ReadOnly Property GetInstance() As MainForm
            Get
                If _singleton Is Nothing Then
                    _singleton = Me
                End If
                Return _singleton
            End Get
        End Property
     
        Public Sub New()
            If Not (GetInstance() Is Me) Then
                MessageBox.Show("déja une instance")
                GetInstance.Focus()
                'sortir du prog
            End If
            ShowSplashScreen(True)
            ...
        End Sub
    Je sais que dans la FAQ il y a déja quelquechose sur le sujet mais la solution me parait un peut complexe pour ce que je veut faire. http://faqcsharp.developpez.com/?pag...gleinstanceapp

    Et je voudrait savoir si cette piste est bonne ou pas déja
    Le problème est que ca me détecte que l'instance en cour est toujours celle en cours de lancement, même si ca il y a déja une instance en cours.

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Mimoza
    Et je voudrait savoir si cette piste est bonne ou pas déja
    Le problème est que ca me détecte que l'instance en cour est toujours celle en cours de lancement, même si ca il y a déja une instance en cours.
    non c'est pas bon.

    Quant tu lances 2 fois ton app, tu as 2 domaines d'application séparé qui sont crées. Les deux domaines ne communiquent pas et donc ta vérification ne peux pas fonctionner. La tu ne fait qu'empécher la création d'une deuxième fenêtre MainForm.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 162
    Points : 445
    Points
    445
    Par défaut
    Alors comment je doit faire ?
    Je pensait passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Process.GetProcessesByName("truc")
    Il me détecte si j'ai déja une instance dans la liste ds processus avec le même nom, mais après je voudrait faire un focus sur ce process et la je bloque

    merci pour l'aide

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Ben tu fait comme dans la FAQ pour détecter ton instance.

    Après tu doit avoir moyen de récup la fenetre principale et de lui donner le focus (peut être avec les API windows ... )

  5. #5
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Sûrement en envoyant un Custom Windows Message à la fenêtre à laquelle tu veux donner le focus (ça passe par l'API Win32, SendMessage, tu as un tutoriel sur développez qui dit comment communiquer avec MSN Messenger, c'est le même principe). Ensuite, quand le formulaire principal reçoit ça il fait quelque chose du genre Form.Select pour reprendre la main sur les autres
    Sinon un grand sage a dit que tu as toujours la méthode des sockets sur localhost si tu veux par exemple faire passer plein de données d'une application à l'autre.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 162
    Points : 445
    Points
    445
    Par défaut
    Merci de vos conseils je vais creuser ca... pour la methode des socket sur local host je vais éviter ca, c'est une machinerie un peut lourde a mettre en place pour une telle fonctionalitée.

  7. #7
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Pas vraiment lourd mais de toute façon à mes yeux, si tu as à faire passer des vraies données (moi faire passer les arguments d'une instance à l'autre ainsi que dire l'état de la première fenêtre et autres), ça sera le plus simple et ça tiendra en 10 lignes de code

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 162
    Points : 445
    Points
    445
    Par défaut
    Non je ne veut pas faire passer des donnée mais juste redonner le focus sur la première instance et fermer la seconde. Un signal suffira je pense

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 162
    Points : 445
    Points
    445
    Par défaut
    En fait il y a une option dans "My project" qui fait cela "Make single instance application"; mais j'ai un problème de Remoting maintenant ...
    J'ouvre un autre sujet pour en parler

Discussions similaires

  1. [Débutant] Instance unique d'une application
    Par xarkam dans le forum C#
    Réponses: 4
    Dernier message: 19/10/2013, 11h51
  2. Réponses: 6
    Dernier message: 06/06/2009, 23h55
  3. Instance unique d'une application portable
    Par shenron666 dans le forum C++
    Réponses: 13
    Dernier message: 21/12/2008, 11h20
  4. Lancement unique d'une application - numero de process
    Par lefabdepau dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/02/2007, 12h17
  5. Lancer un et un seul thread unique dans une application web
    Par rach375 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 22/09/2006, 15h35

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