Lancer une seule instance de mon .exe

Résolu
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005 - 11 févr. 2005 à 15:48
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005 - 24 mars 2005 à 09:28
Voilà, tout est résumé dans le titre !
Je voudrais pouvoir lancer qu'une seule fois mon .exe.
Mais, je ne sais pas comment controler si mon prog est déjà lancé ou non...

Est ce que quelqu'un pourrait m'aiguiller ?
Mercu.
Helau

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mars 2005 à 09:45
Te suffit d'inclure MapSysApp.cpp et h à ton prog.
Te suffira d'appeler
if(IsMappedSysApp(szappname)) et MapUnicSysApp(hmain, szappname);
hmain sera en MFC un GetSafeHwnd() ou truc de ce genre.

ciao...
BruNews, MVP VC++
3
HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
11 févr. 2005 à 16:06
FindWindow()


Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 févr. 2005 à 16:15
autre solution :
-créer un fichier et vérifier s'il est pas déjà présent, le détruire à la fin pour permettre à une autre instance de démarrer.
- sous windows : créer un mutex et si il est dékà présent, c'est que le prog tourne déjà. le fermer à la fin (dans mes sources, mon prog sur la distance parcourrue par la souris utilise cela)
0
alkove Messages postés 37 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 6 mai 2005
11 févr. 2005 à 16:44
N'y a t'il pas une solution aussi avec les instances passées en arguments dans WinMain sous win32 ?
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 févr. 2005 à 17:11
Il n'y a que l'instance courante en 1er param, le second est toujours NULL et seulement present pour compatibilite avec les progs 16 bits.

ciao...
BruNews, MVP VC++
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
11 févr. 2005 à 17:15
non en Win32 hPrevInstance est toujours NULL (héritage du 16 bits ou les progs partagaient le même espace mémoire).
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
11 févr. 2005 à 21:42
salut,

http://www.cppfrance.com/code.aspx?ID=25238

va voir, bcp de gens se sont déja posé cette question.



a++
0
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
22 mars 2005 à 15:41
Excusez moi de ne pas être revenue avant, mais je bossis sur autres choses.
Tout d'abord, je vous remercie de vos reponses. Elles m'ont rapprochées de la solution, mais je n'y suis pas encore !

Je ne crois pas avoir précisé que j'utilisais des MFC.
Le FindWindow() ne fonctionne pas dans mon cas, car mon nom de fenêtre n'est pas fixe.
J'ajoute au nom de ma fenêtre le nom du fichier en cours de traitement, donc qd je relance mon appli, il fait un FindWindow(NULL, "Mon application") alors, que ma fenêtre s'appelle "Mon application - Mon fichier" et je ne connais pas "Mon fichier" dans le nouvel initInstance (sauf si je me trompe... les 2 "exe" ne partagent pas de données, si ? )

J'ai donc testé le Mutex. Ca m'empêche de créer une nouvelle instance, mais je ne peux pas remettre le focus sur l'exe déjà lancé, alors que si j'utilise le findwindow avec une chaine "exacte" je peux le faire (avec le code d'exemple dans msdn)

Bon, je ne sais pas si c'est très clair tout ça.
D'après ce que j'ai lu dans MSDN, FindWindow cherche la chaine exacte, il n'existerait pas un équivalent qui ne chercherait que par rapport au début de la chaine ?

C'est un peu rageant d'être si près du but, mais de ne pas réussir à terminer...
En tout cas, encore merci pour votre aide.
Helau.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 mars 2005 à 17:13
Pourquoi n'utilises tu pas 4 octets du fichier d'échange comme dans mon exemple (url donnée par cosmobob plus haut), ça remet le focus sur le prog à tout coup.

ciao...
BruNews, MVP VC++
0
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
23 mars 2005 à 09:31
J'ai un peu de mal à comprendre comment ça marche, je dois bien l'avouer...
D'autant plus que j'ai toujours développer en utilisant les MFC, ça ressemble, mais c quand même pas exactement la même chose.

A quoi correspond le FileMapping et comment ça fonctionne ?

Par contre, dans ton code, j'ai vu quelquechose qui pourrait résoudre mon problème, c'est à dire affecter un nom de classe à mon appli.
Je pourrais alors utiliser le FindWindow avec le nom de la classe et non le nom de la fenêtre.

Dans ton appli, tu définis
WNDCLASSEX wndcls;
tu affectes toutes les valeurs qui vont bien,
tu fais un RegisterClass, puis tu crées ta fenêtre.

En MFC, la fenêtre n'est pas créée de façon "explicite".
A quel endroit faire l'équivalent de


wndcls.lpszClassName = szappname;
(et quel est cet équivalent ?)

Et comment "récupérer" le bon paramêtre à passer à RegisterClass ?

Merci encore pour ton aide, parce que ce soit pour la première ou la seconde solution, je suis dans le flou artistique !
0
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
23 mars 2005 à 13:26
Merci bcp ! Ca fonctionne ! Super.
Par contre, pour ma culture générale, si tu pouvais m'expliquer un peu le fonctionnement du FileMapping, ça serait cool.

J'ai regardé ds msdn, mais mon anglais étant un peu limité, j'ai du mal à tout comprendre.

Je te remercie encore pour ton aide en tout cas.
Helau
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mars 2005 à 18:35
C'est un trop vaste sujet pour que j'entame cela maintenant, j'ai des commandes à honorer.
Richter traite cela en détails mais c'est encore en english (allez un effort, 50 mots maxi de vocabulaire):
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

ciao...
BruNews, MVP VC++
0
Helau Messages postés 38 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 25 août 2005
24 mars 2005 à 09:28
Merci beaucoup pour ton aide et ta patience.
Helau
0
Rejoignez-nous