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

Soyez le premier à donner votre avis sur cette source.

Vue 9 811 fois - Téléchargée 925 fois

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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
je me répète un peu mais il faut qq1 pour soulever le problème :

sur windows xp : pas de problème : tu selectionnes par exemple 30 fichier puis click droit : ouvrir avec mon programme et le programme demarre et charge les 30 fichiers

sur windows 7 (jai pas essayé sur vista) : tu selectionnes 30 fichiers puis click droit : il se passe rien , t'as pas la possibilite de cliquer sur 'ouvrir avec mon programme !!!

tu selectionnes moins de 15 fichiers puis click droit : et là ca marche comme pour xp : ouvrir avec mon programme et le programme demarre et charge les 15 fichiers

bug ou configuration chelou de windows 7 ???
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
version .net disponible à http://www.vbfrance.com/code.aspx?ID=41008

ShareVB
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

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...
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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
Messages postés
125
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
9 décembre 2006

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
Afficher les 13 commentaires

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.