Systray + 2e instance

[Résolu]
Signaler
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
Voila, c'est une question posée par quelqu'un d'autre a la fin d'un autre topic, qui m'intéresse ... et je doute que les topics "réponse accepté" dont une question est posé par la suite soit encore lus, je repose donc la question, car c'est quelque chose que j'aimerais bien savoir aussi.

Dans le contexte d'une application qui peux être ouverte (Show()) ou en attente (Hide() + systray)

Si jamais l'application est lancéeàlors qu'elle est déjà lancée, j'aimerais que si elle est ouverte, elle passe au premier plan ... et que si elle est en attente, elle s'ouvre et passe au premier plan.

En fait la réaction exacte que peux faire MSN Messenger lorsqu'on relance le .exe si il est ouvert.

Eric

10 réponses

Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
Pour les archives, voila une source qui répond a ces questions



http://www.csharpfr.com/codes/APPLICATION-NE-POUVANT-ETRE-LANCE-QU-SEULE-FOIS_42201.aspx



Eric
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, dans le lien suivant tu as plusieurs propositions pour limiter ton programme à une seule instance ainsi que pour passer les paramètres de la ligne de commande à l'instance déja ouverte.

http://www.csharpfr.com/infomsg_OUVRIR-FICHIER-AVEC-SON-APPLICATION_889845.aspx
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
En fait j'ai insérer ton code dans ma form pour voir ce que ça donnais, et le resultat ne me donne qu'un Msgbox avec le fullpath de mon application. Il n'empêche aucunement l'execution simulatné de plusieurs instance, et pourtant je semblerais lire que oui.

Normalement, lors de la seconde instance, if

( hWnd !=
IntPtr.Zero )
devrait retourner vrai et terminer l'application directement, mais ça ne semble pas fonctionner chez moi.

Eric
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Je viens de tester mon code à nouveau, il fonctionne bien. Si tu l'utilises avec une icone dans le Sytem Tray faut certainement le modifier légèrement. Mais il est utile uniquement dans le cas ou l'on souhaite passer la ligne de commande à l'unique instance active.

J'ai indiqué aussi 2 autres liens qui permettent de limiter le programme à une seule instance, l'un avec les mutex et l'autre avec les processus.
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
OK, je pense comprendre.

Le message box que je voyais afficher, c'était toujours l'application première qui me l'affichait, je me trompe ? et donc ce que tu affiche dans le message box est un message envoyé par la 2e instance, c'est docn avec ça que je pourais lui dire qu'une 2e instance a été ouverte et le faire réagir comme demandé plus haut ... soit refaire un show(), soit la mettre en premier plan ... je me trompe, ou j'ai compris ?

Ensuite je regarderai les liens donnés dans l'autre post lorsque j'aurai davantage de temps. Juste me confirmer ce que j'ai cru comprendre, et ce serait parfait. Merci pour ton aide, je met la question en stand-by et lorsque je me repencherai dessus au courant de la semaine je laisserai savoir ce qui fonctionne ou pas

Eric
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Oui c'est bien ça, les instances suivantes ne s'ouvrent jamais, elle passent juste leur paramètres de ligne de commande à la première instance. J'ai mis une MessageBox juste pour rendre l'exemple plus explicite. Si les paramètres de la ligne de commande t'interesse pas tu verras dans les autres liens qu'alors c'est beaucoup plus simple.
Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
OK, mais les icones dans la barre de tache s'additionnais quand meme, donc l'appli restait bel et bien ouverte :)

Eric
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Je ne te suis pas là, de quoi parles tu ??

Avec mon code les icones dans la barre des taches ne s'additionnent pas, mais à cause de la MessageBox que j'ai mis juste pour rendre le code plus explicite, on voit apparaître un 2éme bouton dans la barre des taches tant que la MessageBox est ouverte mais une fois celle-ci fermée, il ne reste bien qu'une seule instanceen mémoire, d'ailleurs tu peux le verifier avec le gestionnaire des taches.
Messages postés
41
Date d'inscription
lundi 12 février 2007
Statut
Membre
Dernière intervention
2 juin 2010

J'ai utiliser la solution avec les mutex et ca marche tres bien, maintenant je suis dans le meme cas que Eric, j'aimerais qu'une fois que l'on clique pour relancer une deuxieme instance, il passe celle qui es deja lancer au premier plan sans aucun message, tout comme MSN Messenger  merci pour l'aide
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

sinon, si on veut ouvrir des documents dans la même instance : http://www.csharpfr.com/codes/OUVRIR-DOCUMENTS-DANS-MEME-INSTANCE-APPLICATION-SANS-RELANCEMENT_41097.aspx

ShareVB