Composant pour envoyer un string vers une appli qui est en cours d'éxécution
Le composant DiConverse permet d'envoyer un texte à une autre application
*************************************************************************
Le principe de fonctionnement
Consite à marquer la fenetre pricipale de l'application receptrice avec une marque personalisée (utilisation de SetProp).
Cette fenetre est sous-classée de façon à intercepter le message WM_COPYDATA.
Quand elle recoit ce message, on deduit de la strucure COPYDATASTRUCT
Le texte reçu et le composant lève un evenement DataArrival.
Du coté de l'application emetteur, c'est encore plus simple.
On fait une énumération(EnumWindows) des fenêtres pour retrouver la fenêtre ayant la marque (GetProp) de facon à 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 receptrice :
Placez le composant sur la feuille pricipale de votre application
Dans l'evenement Form_Load, placez ce code
Converse1.HookWindow Me.hWnd, MonTag
Dans l'evenement Converse1_DataArrival
Faites le traitement la donnée reçue en parametre.
Dans la fenêtre emmetrice :
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 recepteur
prjEmetteur.exe 'l'emetteur
Lancer une application , si une occurence existe déjà, envoyer la chaine 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
le code est abondemment commenté
http://www.developpez.net/forums/images/attach/zip.gif OCX DiConversel6.zip
Souci avec instanciation d'objet COM
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 ??