Ouvrir des documents dans la même instance de l'application sans relancement de l'exe (dde) en .net

0/5 (4 avis)

Vue 13 433 fois - Téléchargée 1 284 fois

Description

Traduction .Net de http://www.vbfrance.com/codes/OUVRIR-DOCUMENTS-DANS-MEME-INSTANCE-APPLICATION-SANS-RELANCEMENT_27089.aspx

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...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
kornetmuse
Messages postés
38
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 octobre 2010

14 janv. 2010 à 18:30
Bonjour,

3 ans après je sais pas si quelqu'un sera en mesure de répondre mais sait on jamais.

Ca marche niquel si l'application est lancé, mais j'aimerais que si l'application n'existe pas alors cette dernière se lance et interprète le message.

Quelqu'un peut il m'aider?
cs_FraGag
Messages postés
81
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
18 avril 2008

8 janv. 2007 à 02:06
D'après ce que j'ai vu dans les documents d'Office, DDE est utilisé pour ouvrir des documents dans la même instance, mais aussi pour donner des commandes comme Imprimer, fermer le document puis quitter s'il ne reste plus de documents ouverts (bien sûr, on pourrait aussi faire ça en ligne de commande...).
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
7 janv. 2007 à 10:42
salut,

disons que j'arrive un peu tard avec ce code car (d'après ce que j'ai cru comprendre) StartupNextInstance est apparu dans VB2005 et n'est d'ailleurs pas disponible dans les autres langages .Net...donc disons que si par hasard si on programme pour le framework 1.0 ou VB < 2005, ca peut servir...

donc oui : StartupNextInstance et application à instance unique font la même chose...pour VB2005...

cela dit ce code doit pouvoir fournir plus que StartupNextInstance car il doit être possible de télécommander un programme utilisant ce code avec un autre programme...la principale utilité de DDE...

ShareVB
sousoulebarbu
Messages postés
101
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
11 janvier 2009

7 janv. 2007 à 09:59
Loin de moi l'idée de critiquer (je serais incapable d'en faire autant), mais cette fonction est déja présente de base (Application à instance unique et StartupNextInstance) ou je me trompe???

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.