begin process at 2008 07 04 23:27:49
1 204 994 membres
509 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

OUVRIR DES DOCUMENTS DANS LA MÊME INSTANCE DE L'APPLICATION SANS RELANCEMENT DE L'EXE (DDE)


Information sur la source

Catégorie :OLE, DDE, Automation Niveau : Initié Date de création : 25/10/2004 Vu / téléchargé: 7 116 / 676

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


Description

Ce code permet d'ouvrir, imprimer... un ou plusieurs documents dans la même instance d'une application ouverte (ou fermée).
Lorqu'une association de fichier paramètre l'utilisation de DDE, un message WM_DDE_INITIATE est envoyé à toutes les fenêtres au premier plan avec le nom de l'application visée par l'action... si une application répond par WM_DDE_ACK, le shell renvoie un message WM_DDE_EXECUTE avec l'action (et le nom de fichier) à accomplir.
Ainisi, en interceptant ces messages, on peut exécuter une action comme ouvrir un document dans un instance en cours d'une application sans relancement de l'exe et sans ligne de commande...de plus, cela permet d'ouvrir plusieurs fichiers à la fois sans lancer autant d'instance que de fichiers...

Conclusion

A noter qu'il ne faut pas utiliser de tableau dynamique (pour les paramètres de l'action) dans la procédure de fenêtre sous peine de faire planter le programme...
A noter aussi que cette méthode est officielle (mais pas surdocumentée) contrairement à d'autres...

Comme tout subclassing, cela peut planter...à chaque fois (erreur de programmation) ou comme Windows (une fois de temps en temps histoire de se faire remarquer)

Ce code ne comporte pas de bugs apparents à ma connaissance...

Ce code crée une association de fichier .XYZ et utilise cette extension pour DDE...

N'hésitez pas à commenter et à noter...
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de Renfield le 26/10/2004 11:27:01 administrateur CS

    interessant.

  • signaler à un administrateur
    Commentaire de azerty25 le 26/10/2004 19:35:07

    Super ! En plus, j'avai posé la question il y a peu de temps sur le forum sans vraiment chercher à le coder ! Merci :)

  • signaler à un administrateur
    Commentaire de Ynot le 03/11/2004 19:16:25

    Bravo 10/10 très interressant.
    c'est bien codé, bien commenté.

    Peut être réutiliser pour un grand nombre de prog.

    Va servir a beaucoup de monde ici.

    merci.

  • signaler à un administrateur
    Commentaire de Labuzz le 11/04/2005 14:50:44

    Desole mais je porte bien mon nick...

    Comment ca marche ????

    Merci

    I.Labuzz

  • signaler à un administrateur
    Commentaire de ShareVB le 12/04/2005 10:14:37

    salut,

    tu copies les deux fichiers essai.xyz et essai2.xyz quelquepart
    tu compiles le projet
    tu lances une fois l'exe
    tu le fermes
    tu doublecliques sur un des fichiers .xyz, ca ouvre le prog
    tu doublecliques sur un autre fichier .xyz et là tu vois que ca fait comme pour un doc word...

    ShareVB

  • signaler à un administrateur
    Commentaire de yannd0307 le 23/10/2006 23:34:49

    Bonjour,
    Ce code source est vraiment génial. Je m'en sert pour le lecteur mp3 que je suis en train de créer mais j'ai deux problème :
    1) Quand je double-clique sur UNE musique, mon programme se lance et le message d'erreur suivant apparait : "Windows ne trouve pas le fichier <nom de fichier>".

    2) Comment supprimer le label "imprimer avec mon programme" ?
    Cordialement.

  • signaler à un administrateur
    Commentaire de ShareVB le 01/11/2006 12:34:48

    salut,

    euh d'abord, dsl pour le délai de réponse...

    1) il faut relancer le programme manuellement (sans double cliquer sur un fichier) à chaque fois que l'on change l'exe de dossier...donc une première fois à l'installation...ou alors il faut faire un autre exe pour refaire l'association .MP3 <> ton prog...sinon est ce que ce que tu recois dans OnReceiveCommand est un nom de fichier complet et existant...en tout cas je n'arrive pas à avoir ce bug sur mon ordi...

    2)tu supprimes simplement du Form_Load la commande FileAssociation qui contient "Imprimer"...

    ShareVB

  • signaler à un administrateur
    Commentaire de frederios le 06/11/2006 15:08:31

    Salut merci pour la source mais une petite question

    Serait-il possible de bypassé le module modAssociation.bas donc de juste signaler au programe qui roule dejas le nouveau data a ajouter dans le listbox???

    Merci d'avance!!!

  • signaler à un administrateur
    Commentaire de frederios le 06/11/2006 15:15:00

    En gros je veux juste pas que le programe roule plus d'une instance mais en meme temp mon app envoie et recoie du data a chaque demarage...

    en gros voila ce que je veux qui arrive...

    -le programe demare
    -Il verifie si il est la premiere instance
    --si il est de premiere instance il reste en attente.
    --sinon il envoie du data a son clone de premiere instance et ferme

    ca devrais pas etre trop compliquer mais je trouve juste pas comment...

    Si quelquun a une idee ca serais tres apprecier si tu la partageais..


    Merci a l'avence

  • signaler à un administrateur
    Commentaire de ShareVB le 06/11/2006 15:46:16

    salut,

    pour moi, entre ce que tu demandes et ce que fait déjà le code, il n'y a aucune différence :
    -> le programme démarre avec ou sans fichier en arguments ou par double clic
    -> à chaque double clic sur un fichier, ta première instance reçoit le nom du fichier

    tu peux te passer de modAssociation.bas qui ne sert qu'à enregistrer l'association extension <-> ton appli...

    si tu veux une seule instance, dans le Form_load tu mets un "If App.PrevInstance Then End" au début...

    enfin : tu dis du "data" mais ca sera TOUJOURS et UNIQUEMENT des noms de fichiers...

    ShareVB

  • signaler à un administrateur
    Commentaire de frederios le 06/11/2006 16:36:17

    non non cest pas pareil p[arce que le code si haut metionner ne fonctionne que si tu execute a partire de l'association avec un fichier...

    moi ca a rien avoir avec le fais que je le part apartire d'un fichier(que ce soie xyz ou un n autre) si tu bypass le module d'association ca marche juste pus... le dde se fais entre ton premiere instace du app et le shell lui meme(donc ca passe pas par une deuxieme instance...

    moi je veux qu'un deuxime instance communique avec la premiere...

    merci quand meme j'espere que tu comprend ce que je cveux dire...

  • signaler à un administrateur
    Commentaire de ShareVB le 06/01/2007 22:06:42

    version .net disponible à http://www.vbfrance.com/code.aspx?ID=41008

    ShareVB

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS