Comment faire pour avoir une instance unique [Résolu]

Signaler
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006
-
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006
-
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

Messages postés
122
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
8 août 2014
1
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.
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

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?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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>
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

oui je vais faire passer ca par le registre cest tout
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
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
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

Parfais

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