EMPÊCHER D'OUVRIR PLUSIEUR FOIS UN PROGRAMME EN VB NET

Signaler
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
-
Messages postés
30
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
4 octobre 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31008-empecher-d-ouvrir-plusieur-fois-un-programme-en-vb-net

Messages postés
30
Date d'inscription
mardi 21 août 2007
Statut
Membre
Dernière intervention
4 octobre 2010

Merci Pour l'info!
Messages postés
28
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
7 janvier 2009

en fait pour avoir une seule instance et passer des paramètres quand on le relance avec paramètre, on peut utiliser "StartupnextInstance" de vb 2008 (c'est ce qui remplace "App.PrevInstance" de vb6). Pour l'activer suffit d'aller dans les propriétés du projet et de cocher la case "application à instance unique" puis cliquer sur le bouton "Afficher les événements de l'application" ainsi le fichier "applicationEvents.vb" est ajouté à l'explorateur de code. On y trouver la fonction pour le StartupNextInstance et on peut y ajouter le code que l'on veut. Les paramètres sont passé dans le tableau défini à "Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs" passé par valeur (par défaut e) soit e.CommandLine(0) où la position zéro contient le premier argument passé.
Ainsi on a qu'une instance de l'application et si on la relance il n'y a pas de nouvelle instance mais l'argument passé lors de la relance est passé au programme.
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

J'ai pas bien compris la question.
Messages postés
28
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
7 janvier 2009

oui mais comment fait-on alors pour activer l'autre instance avec des paramètres?
Messages postés
8
Date d'inscription
jeudi 3 mai 2007
Statut
Membre
Dernière intervention
6 janvier 2009

pas mall merci les gars
Messages postés
10
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Ha ok, merci de l'info.
A propos du code au dessus, il ne marche pas tout le temps.
Je vais jeter un oeil dans msdn
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Plutôt que de faire tourner une boule sur des ensemble numérotés, on peut la faire exécuter des opérations sur les éléments d'une collection quelconque
Par exemple desfois on veut exécuter un code sur tous les contrôles d'un form, dans une boucle for each in VB se charge de le lancer une fois et une seule sur chaque contrôle... plus simple
T'as regardé dans la MSDN ?
Messages postés
10
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
20 avril 2009

dans quel cas on utilise la boucle for each in next i?
merci de repondre, je débute dans VB .net
Raxius
Messages postés
10
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Vraiment sympa le code, merci
Raxius
Messages postés
8
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
20 août 2006

Pas mal. Je viens de le rajouter dans mon code
Messages postés
1
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
7 octobre 2005

salut moi j'etulise vb6 et je fais la meme code pour eviter le lancement de mes applications plus qu'une foit et le code doit etre ajouter dans la section load du premier form charge dans la memoire et le code comme suit:

If App.PrevInstance Then
msgbox " LE PROGRAMME EST DEJA OUVERTE "
end
End If
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Un truc genre App.PrevInstance te compte le nombre d'application déjà ouvertes
Je me souviens plus exactement de l'orthographe...
Messages postés
5
Date d'inscription
mardi 20 avril 2004
Statut
Membre
Dernière intervention
9 septembre 2005

En vb6 sa donne quoi ?
Messages postés
91
Date d'inscription
mercredi 27 février 2002
Statut
Membre
Dernière intervention
3 décembre 2011

Perso moi j'utilise presque la même chose :

'Controle si une instance existe déjà
If Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then
MsgBox("Application déjà lancée !")
End
End If

Et à part le cas ou un autre soft est le même nom de processus, j'ai pas de bug.

(En fait je compte les nombre d'élément du tableau de process ayant le nom du mien, si il y en a plus d'un j'interdit le lancement.)

Voilou.
Pour le cas ou on veuille controler ceci et enlever le bug des noms de process, on peut ajouter un comparatif de la taille des exe ou bien des versions (2 soft de meme nom de meme taille et de meme version devient tres rare..)
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
exact et il y a le bug où tu démarre une première instance, puis tu ouvre un autre logciel et après tu ouvres une 2e instance

le code regarde juste le dernier process. Par contre, c'est pas très dur a adapter
Messages postés
4
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
15 juin 2005

Et si une autre app ayant le même ProcessName était déjà lancée?
Je pense que ton application ne va pas démarrer.
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
En effet je comprend tout a fait ! La boucle !
Messages postés
53
Date d'inscription
vendredi 2 janvier 2004
Statut
Membre
Dernière intervention
1 décembre 2008

C'est très partique pour les boucles For... Next, car si le For Each .... in ... est bien utile, lorsque tu as besoin de l'indice dans une boucle For Next et que tu ne connais pas la taille du tableau tu peux faire...
Dim i as Integer
Dim xxx(20) ' en admettant que tu ne connaisses pas 20
For i = 0 to xxx.GetUpperBound(0)

Next
Messages postés
53
Date d'inscription
vendredi 2 janvier 2004
Statut
Membre
Dernière intervention
1 décembre 2008

Eh bien le premier c'est LBound pour LowerBound et le dernier UBound pour UpperBound.
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
D'accord j'ai pigé donc si le Ubounds est supérieur à zero (un dans une collection) C'est que la même AppliY est plusieurs fois !

Merci !

C'est quoi l'inverse de ubounds pour avoir le premier element d'une collection ?!
Messages postés
589
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
29 avril 2008
2
code sympa MERCI
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

C'est l'indice du dernier élément d'un tableau de données
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Que signifie UBounds comme fonction ?!

Merci d'avance !
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
4
juste ça ça aurait été assez

If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
MsgBox("Application deja ouverte !", MsgBoxStyle.Critical, "Message à l'usager")
End
End If
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

If (x > 0) = True Then
On peut pas mettre
If x > 0 Then
en VB.NET ? Pas pratique...
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Enfin voilà ce que je cherchais ! C'est pas trop tôt ! Car c'est embêtant d'ouvrir plusieurs fois le même logiciel ! Merci beaucoup ! Je t'ai mis 5/10. Mais je pense que j'aurai du mettre plus !