Comment faire pour avoir une instance unique

Résolu
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006 - 26 oct. 2006 à 18:07
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006 - 29 oct. 2006 à 22:27
Comment faire pour avoir une instance unique de mon programe et capturer le command line(Command$)  sur l'instance qui vient d'etre executer

donc en bref

j'execute mon programe du commande line une premiere fois ex

c:\programe.exe /f:allo

et je le reexecute

c:\programe.exe /f:bon 2iem fois

alors la je veux que ca block une 2iem execution et recuperer le"/f:bon 2iem fois"

je sais pas si vous comprenez?

Merci a l'avance...

9 réponses

cs_FPatrick Messages postés 122 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 8 août 2014 1
26 oct. 2006 à 18:12
Bonjour,

Pour la première partie, il existe en vb6 app.previnstance qui te dira s'il existe déjà une instance de ton application (attention a tester en mode compilation seulement).

Pour la deuxième partie, tu peux par exemple une liaison dde entre tes applications mais je pense qu'il y a beaucoup mieux que cela.

Bonne journée.
3
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006
26 oct. 2006 à 18:16
Merci pour la premiere partie du probleme effectivement j'avais jamais remarquer mais oui il y a un app.previnstance.
merci

quelquun a une idee de comment faire passer le command$ d'un instance  a l'autre?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 oct. 2006 à 18:17
Salut,

utilise cette fonction de Renfield (que tu peux retrouver ICI) :

Public Function IsAlreadyRunning() As Boolean
  Dim hMap As Long
  Dim pMem As Long
  Dim hPid As Long
       '# Nous tentons ici d'acceder au mappage (précedemment créé ?)
       hMap = OpenFileMapping(FILE_MAP_READ, 0, App.Title)
       If hMap <> 0 Then
           '# L'application est déjà lancée.
           pMem = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0)
           If pMem <> 0 Then
               '# On récupère le handle vers la précédente fenêtre
               CopyMemory hPid, ByVal pMem, 4
               If hPid Then
                   On Error Resume Next
                   '# On active l'instance précedente
                   AppActivate hPid
                   On Error GoTo 0
               End If
               UnmapViewOfFile pMem
           End If
           '# On libère le handle hmap
           CloseHandle hMap
           '# et on prévient l'appelant que l'application avait dejà été lancée.
           IsAlreadyRunning = True
       Else
           '# Nous sommes dans la première instance de l'application.
           '# Nous allons laisser une marque en mémoire, pour l'indiquer
           hMap = CreateFileMapping(INVALID_HANDLE_VALUE, ByVal 0&, PAGE_READWRITE, 0, 4, App.Title)
           If hMap <> 0 Then
               '# On ouvre le 'fichier' en écriture
               pMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0)
               If pMem <> 0 Then
                   '# On y écrit le process courant
                   CopyMemory ByVal pMem, GetCurrentProcessId(), 4
                   UnmapViewOfFile pMem
               End If
               '# Pas de CloseHandle hMap ici, sous peine de détruire le mappage lui-même...
           End If
       End If
   End Function

' Remarque :
' L'avantage par rapport a l'instruction App.PrevInstance de VB, ' c'est qu'ici, l'éventuelle première instance sera réactivée.

--Mortalino-- Colorisation automatique

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006
26 oct. 2006 à 18:34
est-ce qu'il manque des declaration pour que ca marche parce que moi ca me dit
sub or function not define sur OpenFileMapping

tout de meme merci pour la function
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
26 oct. 2006 à 18:46
En IDE, c'est normal, il faut le tester en compiler.
C'est le but, d'ailleurs^^

Regarde aussi sa source, ce sera certainement plus parlant, tu pourras faire ainsi des test :
http://www.vbfrance.com/codes/INSTANCE-UNIQUE-VOTRE-APPLICATION_39361.aspx

C'est l'idéal, confère sa remarque dans sa fonction.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 oct. 2006 à 22:15
Pour la seconde partie de la question, concernant le passage des paramètres...

il faut établir une communication entre les deux instances,
envoyer les parametres de l'instance 2 a l'instance 1
activer l'instance 1
fermer l'instance 2

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006
29 oct. 2006 à 22:17
oui je vais faire passer ca par le registre cest tout
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 oct. 2006 à 22:25
par le registre.....
admettons...

mais faut que tu puisse prévenir ton instance 1 qu'elle doit effectuer une action ...
quelle doit réagir, aux paramètres recus (et ecris dans le registre) par l'instance 2

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
frederios Messages postés 125 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 9 décembre 2006
29 oct. 2006 à 22:27
Parfais

je m'astine plus mais je trouve tout dememe que j'ai autant raison que toi alors continue
0
Rejoignez-nous