IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

Composant pour envoyer un string vers une appli qui est en cours d'éxécution [Sources]


Sujet :

Vos contributions VB6

  1. #1
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut 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é

    OCX DiConversel6.zip
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    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
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  3. #3
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Merci du compliment
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  4. #4
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    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
    Le plus difficile pour trouver une bonne réponse, c'est déjà de trouver la bonne question.

  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le merci me fait grand plaisir.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    idem .. punaise enfin un truc qui tienne compte de la problématique émission ET réception ...

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut 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 ??

  8. #8
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    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.
    Le plus difficile pour trouver une bonne réponse, c'est déjà de trouver la bonne question.

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    et c'est dans le timer qu'il faut faire l'instanciation de l'objet COM ??

  10. #10
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par ffreund
    et c'est dans le timer qu'il faut faire l'instanciation de l'objet COM ??
    Exact !
    Le plus difficile pour trouver une bonne réponse, c'est déjà de trouver la bonne question.

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    ben oui mais non
    j'ai pas envie de modifier tout mon code ...

    parce que des appels à des composants com j'en ai de partout !

  12. #12
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Dans ce cas tu peux modifier l'OCX pour que l'événement DataArrival ne soit pas déclenché directement à l'arrivée du message windows, mais sur un timer.
    Le plus difficile pour trouver une bonne réponse, c'est déjà de trouver la bonne question.

  13. #13
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    bonne idée çà ,Najdar, je vais modifier mon composant , laissez moi une heure ou deux
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  14. #14
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Voila, l'amélioration est faite, il faut recharger le zip du premier post
    Normalement ca devrait résoudre le problème de Ffreund
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  15. #15
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    yep merci !!
    je viens de mettre en place la modif proposée par Najdar et ça marche nickel !

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Bon il me reste un souci ....

    Le programme appelé ne vient pas se mettre en premier plan..

    C'est pas bien grave mais visiblement ça semble gérer dans le code mais ça ne fonctionne pas chez moi.

    En fait l'application appelée clignote dans la barre des taches mais ne vient pas se mettre en premier plan... il faut cliquer dessus.

    Je suis en Windows 2000 et je teste pour l'instant qu'en debug c'est peut être la cause ??

  17. #17
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Là, c'est un autre problème. Fais un post séparé avec le code de l'appel.

    Merci Delbeke pour la modification
    Le plus difficile pour trouver une bonne réponse, c'est déjà de trouver la bonne question.

  18. #18
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Pas de quoi, a votre service
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  19. #19
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Salut,

    j'ai un problème avec le converse :

    Dans le form récepteur j'ai inséré cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Converse1.HookWindow Me.hwnd, "TAGGLE"
    Malheureusement à son appel j'obtiens un "le composant activex ne peut créer l'objet"

    J'ai eu beau investiguer je n'arrive pas à le faire marcher ...

    Une idée ?

  20. #20
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Pour essayer de comprendre ce qui se passe, tu crees un projet exe standard,
    tu ajoutes un projet ,et la tu choisis le projet du composant DiConverse6.
    Ensuite sur le projet standard, tu poses un Diconverse, un bouton de commande et tu y mets ton code (Converse1.HookWindow Me.hwnd, "TAGGLE") ce qui premettra de voir exactement ou çà se plante
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

Discussions similaires

  1. lien vers une page qui est une frame
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 22
    Dernier message: 10/03/2011, 17h32
  2. Réponses: 0
    Dernier message: 27/03/2009, 11h34
  3. redirection dynamique vers une ancre qui est fonction d'actions antérieues
    Par j.p.mignot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/01/2008, 16h33
  4. Réponses: 7
    Dernier message: 01/12/2007, 02h23
  5. recherche composant skin pour modifier le look d'une appli
    Par kivoch dans le forum Composants VCL
    Réponses: 5
    Dernier message: 02/09/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo