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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    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

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

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Merci du compliment

  4. #4
    Membre chevronné
    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 : 50
    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
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Le merci me fait grand plaisir.

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

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

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

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    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 ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    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

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

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

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

    N'aimant pas trop le principe du composant activex (à la longue cela devient lourd à gérer si ils se multiplient) j'ai opté pour une solution dégradée mais convenant à mes besoins.

    app1.exe
    app2.exe
    - form1.frm

    app1.exe : postmessage to form1.frm (message de type long)
    app2.form1.frm : getmessage

    3 apis à déclarer et le tour est joué.
    Néanmoins, c'est limité par rapport à ta solution Delbeke car on ne peut par ce moyen envoyer un message string que d'au plus 4 caractères (de façon à respecter la capacité max d'un long)

    Voilà, a+

  10. #10
    Membre émérite Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Par défaut
    Je ferais juste deux petites suggestions :
    - Pourquoi ne pas mettre le Tag en tant que propriété, l'avantage serait que l'utilisateur du control n'aurait pas besoin de refaire passer à chaque fois le tag en paramètre.
    - De plus, pourquoi n'as tu pas opté pour la solution de réccupérer le Handle de la feuille avec Parent ? Cela aurait aussi permi d'enlever un paramètre, et au passage d'éviter (peut-être) à l'utilisateur de faire appel à la méthode HookWindow en le faisant automatiquement.

    Sinon superbe travail
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Citation Envoyé par avigeilpro
    Je ferais juste deux petites suggestions :
    - Pourquoi ne pas mettre le Tag en tant que propriété, l'avantage serait que l'utilisateur du control n'aurait pas besoin de refaire passer à chaque fois le tag en paramètre.
    - De plus, pourquoi n'as tu pas opté pour la solution de réccupérer le Handle de la feuille avec Parent ? Cela aurait aussi permi d'enlever un paramètre, et au passage d'éviter (peut-être) à l'utilisateur de faire appel à la méthode HookWindow en le faisant automatiquement.

    Sinon superbe travail
    Merci Avigeil,
    Ce sont deux bonnes idées, j'aurais du y penser.
    Maintenant, il y a un problème de compatibilité avec tous les composants que j'ai mis dans mes developpements à respecter.
    Donc ca va être difficile à implémenter. ll faudrait refaire un nouveau composant avec un nom différent.

    Autres inconvénients:
    1° Le composant ne pourrait plus adresser qu'un autre projet, alors qu' actuellement on peut faire un senddata avec des mark différents (posibilité que je n'ai jamais utilisé par ailleurs) , pour eviter, on pourait implementer senddata avec le mark optionnel.
    2° Le composant serait démarré automatiquement au chargement de la feuille, on n'aurait donc plus la maitrise. (ce qui à mon avis n'est pas tres important)

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