Echange de textes entre 2 applications

Présentation

Le composant DiConverse permet d'envoyer un texte à une autre application
*************************************************************************
Le principe de fonctionnement
Consiste à marquer la fenêtre principale de l'application réceptrice avec une marque personnalisée (utilisation de SetProp).
Cette fenêtre est sous-classée de façon à intercepter le message WM_COPYDATA.
Quand elle reçoit ce message, on déduit de la structure COPYDATASTRUCT
Le texte reçu et le composant lève un évènement DataArrival.

Du coté de l'application émetteur, c'est encore plus simple.
On fait une énumération(EnumWindows) des fenêtres pour retrouver la fenêtre ayant la marque (GetProp) de façon à lui envoyer le message WM_COPYDATA.
*************************************************************************
Utilisation du composant
Inventez un nom unique , ce nom unique sera utilisé dans les deux applications
exemple : MonTag = "DELBEKE_TEST_1"
Dans la fenêtre réceptrice :
Placez le composant sur la feuille principale de votre application
Dans l'événement Form_Load, placez ce code
Converse1.HookWindow Me.hWnd, MonTag
Dans l'événement Converse1_DataArrival
Faites le traitement la donnée reçue en paramètre.


Dans la fenêtre émettrice :
Dans la procédure qui vous convient, utilisez
Converse1.SendData LeTexteAEnvoyer, MonTag
*************************************************************************
Exemples fournis avec le composant
Envoi d'un texte a une autre application
prjReceteur.exe 'le récepteur
prjEmetteur.exe 'l'émetteur
Lancer une application , si une occurrence existe déjà, envoyer la chaîne de commande a cette instance au lieu de démarrer une nouvelle instance.
prjLanceChaineCommande.exe 'le lanceur de prjChaineCommande.exe
prjChaineCommande.exe 'l'appli lancée
Téléchargement
0  0 
Téléchargé 27 fois Voir les 25 commentaires
Détails
Catégories : Communication
Avatar de Delbeke
Membre expert
Voir tous les téléchargements de l'auteur
Licence : Non renseignée
Date de mise en ligne : 14 novembre 2010




Avatar de ThierryAIM ThierryAIM - Expert éminent https://www.developpez.com
le 04/11/2006 à 13:32
Pardon pour le retard

Pas mal, et bien documenté
Même moi j'ai tout compris, c'est dire

Je l'ai aussi testé en bidirectionnel, ça fonctionne très bien

Merci à toi
Avatar de Delbeke Delbeke - Membre expert https://www.developpez.com
le 06/11/2006 à 19:41
Merci du compliment
Avatar de Najdar Najdar - Membre averti https://www.developpez.com
le 15/11/2006 à 11:26
Pour mettre confronté à ce problème (communication entre deux applications) pendant un long moment. Je mets 5 étoiles

Après beaucoup de recherches sur le net, c'est la première fois que je trouve (par hasard) une solution propre pour transmettre des ordres (sous forme de texte) entre deux applications.

Merci
Avatar de Delbeke Delbeke - Membre expert https://www.developpez.com
le 15/11/2006 à 23:12
Le merci me fait grand plaisir.
Avatar de Vld44 Vld44 - Membre expérimenté https://www.developpez.com
le 27/11/2006 à 15:15
idem .. punaise enfin un truc qui tienne compte de la problématique émission ET réception ...
Avatar de ffreund ffreund - Membre à l'essai https://www.developpez.com
le 28/11/2006 à 11:15
Bonjour à tous,
J'ai utilisé DiConverse pour dialoguer d'un EXE à un autre mais j'ai un gros problème.

Je veux passer à un EXE une chaine, par exemple un code client.
A partir de ce code client je veux ouvrir sa fiche...
L'evenement DataArrival se déclenche bien, la chaine est nickel, par contre quand j'essaye d'ouvrir ma fiche client, j'instancie pour cela un objet COM:
Set oClient = new XXXX, et là BOUM :

Erreur n° : 2147417843
Un appel sortant ne peut pas être effectué étant donné que l'application répartit un appel entrant synchrone

En fouillant un peu sur GoogleGroups, je trouve que pour éviter ce souci il faut utiliser Postmessage plutôt que Sendmessage car Postmesssage n'attend pas de réponse du "récepteur" ...
J'ai remplacé dans ton code le Sendmessage par un Postmessage mais là le hic, c'est que l'évenement DataArrival ne se déclenche plus ....

Tu as une autre idée ??
Avatar de Najdar Najdar - Membre averti https://www.developpez.com
le 28/11/2006 à 11:31
J'ai déjà une erreur de ce type en utilisant le sous-classement (méthode qui est utilisée ici). La solution que j'ai employé (mais qui me semble pas très propre) est d'utiliser un timer.

Mets un timer sur une feuille (Enable = False et Interval = 1), dans ton événement DataArrival, met Timer.Enable=True. L'événement du timer va se déclencher une fois que l'événement DataArrival sera finir et là plus de problème.
Dans l'événement du timer pense à mettre Enable = False pour qu'il ne se déclenche qu'une seule fois.
Avatar de ffreund ffreund - Membre à l'essai https://www.developpez.com
le 28/11/2006 à 11:37
et c'est dans le timer qu'il faut faire l'instanciation de l'objet COM ??
Avatar de Najdar Najdar - Membre averti https://www.developpez.com
le 28/11/2006 à 11:38
Citation Envoyé par ffreund
et c'est dans le timer qu'il faut faire l'instanciation de l'objet COM ??
Exact !
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.