Systray + 2e instance

Résolu
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 - 9 avril 2007 à 18:59
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 21 mai 2007 à 22:54
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

ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
16 avril 2007 à 04:06
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 avril 2007 à 19:25
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
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
9 avril 2007 à 19:42
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 avril 2007 à 21:06
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
9 avril 2007 à 21:58
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 avril 2007 à 23:50
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.
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
10 avril 2007 à 01:27
OK, mais les icones dans la barre de tache s'additionnais quand meme, donc l'appli restait bel et bien ouverte :)

Eric
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
10 avril 2007 à 03:14
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.
0
aifzaide Messages postés 41 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 2 juin 2010
10 avril 2007 à 14:36
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
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 25
21 mai 2007 à 22:54
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
0