begin process at 2012 05 27 06:12:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > COMMUNICATION ENTRE DEUX INSTANCES D'UN MÊME PROGRAMME

COMMUNICATION ENTRE DEUX INSTANCES D'UN MÊME PROGRAMME


 Information sur la source

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Expert Date de création :22/03/2003 Date de mise à jour :24/03/2003 15:27:31 Vu / téléchargé :7 937 / 545

Auteur : fredlynx

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voilà, le problème que je me suis posé lors du concours de VBfrance:

1er) Je l'ance une application (par un click droit dans l'exploreur windows) avec une chaine de commande qui correspond à un fichier image par exemple...

2eme) Je lance une nouvelle fois l'application avec un autre raccourici et je voudrais que la commande passe dans la premier application déja ouverte.. et surtour que l'apllication ne se lance pas deux fois...

ET Bien j'ai enfin trouvé la solution !!! Donc c'est valable pour autre chose que des images biensur... J'ai essayé de le rendre le plus souple possible d'utilisation... en clair il faudra rajoutter à votre aplli 1 module.bas une classe et trois ligne dans le démarage de votre prog...
  

OUI POUR TESTER LE FONCTIONNEMENT JE VOUS AI MIS LE PROG INSTANCE.EXE ... lancer le deux fois :) ...
Pour les inquiet de nature ... compilé le source et lancer votre compil

Vous aurez compris ... CA NE MARCHE PAS EN DEV MODE !  

Mise A jour le 24/03/2003: LE PLANTAGE SOUS W98 EST RESOLU !!!
Le problème venait du détachement du callback qui ne se fesait pas. Il semble que sous W98 le programme ne passe pas par la fonction de la classe
Class_Terminate ...

Source

  • 'Seulement ça dans votre form_load
  • Méthode 1:
  • 'Déclaration de la classe
  • Set My_Instance = New InstanceClass
  • 'Initialisation de la classe (Création du TextBox de reception)
  • My_Instance.InitClass Me.hwnd
  • 'Renseigne le texte à faire passer au textbox de l'autre instance
  • My_Instance.CommandLine = "Message envoyer par la deuxième instance !!! "
  • 'Définition de l'action a réalier
  • 'Ici on anvoie le texte à l'instance déja en mémoire et on arrête le prog
  • My_Instance.ActionCmd = Send_Killme
  • 'Vas teste :) :) :)
  • My_Instance.PrevInstace
  • Méthode 2:
  • 'Déclaration de la classe
  • Set My_Instance = New InstanceClass
  • 'Initialisation de la classe (Création du TextBox de reception)
  • My_Instance.InitClass Me.hwnd
  • 'Définition de l'action a réalier juste le test
  • My_Instance.ActionCmd = None
  • 'Vas teste :) :) :)
  • If My_Instance.PrevInstace = True Then
  • My_Instance.SendTexte "Message envoyer par la deuxième instance !!! "
  • My_Instance.SowPrev
  • My_Instance.Class_Terminate98
  • End
  • Else
  • 'Ici on continu le prog
  • End If
  'Seulement ça dans votre form_load
Méthode 1:

  'Déclaration de la classe
    Set My_Instance = New InstanceClass
  'Initialisation de la classe (Création du TextBox de reception)
    My_Instance.InitClass Me.hwnd
  'Renseigne le texte à faire passer au textbox de l'autre instance
    My_Instance.CommandLine = "Message envoyer par la deuxième instance !!! "
  'Définition de l'action a réalier
  'Ici on anvoie le texte à l'instance déja en mémoire et on arrête le prog
    My_Instance.ActionCmd = Send_Killme
  'Vas teste :) :) :)
    My_Instance.PrevInstace

Méthode 2:

  'Déclaration de la classe
    Set My_Instance = New InstanceClass
  'Initialisation de la classe (Création du TextBox de reception)
    My_Instance.InitClass Me.hwnd
  'Définition de l'action a réalier juste le test
    My_Instance.ActionCmd = None
  'Vas teste :) :) :)
    If My_Instance.PrevInstace = True Then
        My_Instance.SendTexte "Message envoyer par la deuxième instance !!! "
        My_Instance.SowPrev
        My_Instance.Class_Terminate98
        End
    Else
        'Ici on continu le prog
    End If

       


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip OCX - ARBRE STYLE DE L'EXPLORATEUR WINDOWS
Source avec Zip Source avec une capture CLASS CSOCKET AMÉLIORÉE | PROXY HTTP & SOCK4 & SOCK5 | TRANS...
Source avec Zip Source avec une capture RESSOURCE DE LANGUE EXTERNE DANS UN FICHIER TEXTE
Source avec Zip Source avec une capture MODIFIER LE STYLE FENÊTRE ET LE MENU SYSTÈME "AT RUNTIME"
Source avec Zip Source avec une capture TREELISTVIEW - ENUMWINDOWS AND ENUMCHILDWINDOWS ...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

Commentaires et avis

Commentaire de DarthPredateur le 22/03/2003 09:22:30

trop cool encore bravo pour tes supers sources

Commentaire de Bricomix le 22/03/2003 11:55:11

Merci pour cette source ! Je m'étais déjà posé la question, sans y réfléchir d'avantage. Et toi, tu l'as fait !! 10/10

Commentaire de logisim le 23/03/2003 16:21:43

Super, mais lorsqu'on lance la deuxième instance ça plante, même si la ligne de commande est bien passée. Je suis sous Win98, une solution ?

Commentaire de fredlynx le 23/03/2003 16:55:43 administrateur CS

C a dire ça plante ?? Je n'ai pas testé sous 98 :( mais je ne vois pas trop ce qui peut géner... Essaye de faire comme ça dans l'exemple et recompile..

Private Sub Form_Load()
    Label2.Caption = "Cette application est la première instance du programme lancé...  " & vbCrLf & _
                    "Si vous relancer une autre fois l'application alors...." & vbCrLf & vbCrLf & _
                    "Vous recevrez un message de la deuxièmme instance dans le text box ci-dessus"
  'Déclaration de la classe
    Set My_Instance = New InstanceClass
  'Initialisation de la classe
    My_Instance.InitClass Me.hwnd
  'Renseigne le texte à faire passer au textbox de l'autre instance
    My_Instance.CommandLine = "Message envoyer par la deuxième instance !!! "
  'Définition de l'action a réalier
  'Ici on anvoie le texte à l'instance déja en mémoire et on arrête le prog
    My_Instance.ActionCmd = None
  'Vas teste :) :) :)
    If My_Instance.PrevInstace = True Then
        My_Instance.SendTexte
        End
    End If
End Sub

Commentaire de suoe le 24/03/2003 14:33:55

salut pas mal ton programme mais il plante sous win98.Kess ki plante voila le message à toi de déchiffrer ;-) lol :

INSTANCE a causé une défaillance de page dans
le module <inconnu> à 0000:00000000.
Registres :
EAX=00000000 CS=018f EIP=00000000 EFLGS=00010246
EBX=00000002 SS=0197 ESP=0063fa60 EBP=0063fad4
ECX=004034c5 DS=0197 ESI=00000000 FS=4ce7
EDX=816a3ec8 ES=0197 EDI=0063fadc GS=0000
Octets à CS : EIP :
01 00 00 00 65 04 70 00 16 00 cd 09 65 04 70 00
État de la pile :
004034c5 00000880 00000002 00000000 00000000 0063fadc 00008b4c 0063fb28 0107ccb4 0000085c 0063fae4 00000000 00000000 0000085c 00000002 00000000

Commentaire de fredlynx le 24/03/2003 15:31:30 administrateur CS

Bien vu pour W98 Le soucis venait de fait que sous 98 on ne passe pas par la fonction:
Private Sub Class_Terminate()
  'Retire le subclass
    DetachCallback
End Sub
Pourquoi ???
Donc en fait on ne supprimé pas le callback d'ou le plantage...
La modif : un ajout d'appel de DetachCallback dans la fonction de sortie automatique et l'ajout d'une fonction  Public Sub Class_Terminate98() pour l'arrêt en manuel voir exemple ci-dessus.

Merci a vous pour les infos :)

Commentaire de DarthPredateur le 24/03/2003 17:28:47

moi je dis quel merde c'est de la merde c vieux OS :)

Commentaire de man15372 le 28/03/2003 19:06:01

Mwouai ...
Pour le conflit entre instance y'a plus simple :
app.previnstance te donne le handle d'une instance probable déja lancée.
Pour la communication entre tes 2 instances il y a une api :
alors avec l'api sendmessage tu peut même evoyer un message personnalisé. entre 2 application (Bien sur à condition que cette appli soit prête à le recevoir sinon il ne sera pas traité).
Voila INSTANCE.EXE est remplacable par 1 ligne pour le problème de l'instance et 1 ligne pour l'API sendmessage, 1 ligne pour l'envoi du message et 2 lignes pour la récupération via un événement personnalisé.
Total  5 lignes.
Ca fait pas mal d'économie de code ainsi que une plus petite perte de
neuronnes.

Cordialement.
man15372

Commentaire de fredlynx le 28/03/2003 19:19:06 administrateur CS

app.previnstance c ton choix .. moi ça fait longtemps que je ne l'utilise plus !
Alors si tu as quelques neurones à perdre... parcours les info de chez MS et tu veras pourquoi ...

Commentaire de fluminis le 04/05/2003 13:51:58

Youpi, depuis le temps que je cherchais a faire ca !
bon j'ai encore des problemes pour adapter cette source à mes besoins mais vraimant bravo !!

Commentaire de OphidiaN le 04/05/2003 21:58:28

trop bon :)

Commentaire de facdaar le 03/06/2003 00:16:09

Chapeau bien bas

Commentaire de yannickt le 04/08/2004 23:08:43

L'idée est excellente, le produit fonctionne bien, mais quelle idée d'avoir tous mis ca dans le même prog! Je Comprends que vous vouliez démontrer comment éradiquer les multiples instances, mais c'est un tel cafouillis! Heureusement, vous avez bien commenté, me permettant ainsi de comprendre votre code, sans ça...! Mais bravo quand même!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales