begin process at 2012 02 11 18:45:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

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

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


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :ouvrir, instance, dde Niveau :Initié Date de création :13/01/2007 Date de mise à jour :17/03/2008 22:27:27 Vu / téléchargé :8 407 / 343

Auteur : ShareVB

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

Dans VB2005, il existe une option pour rendre une application "à instance unique" et pouvoir récupérer dans l'instance ouverte une liste des fichiers sur lesquels l'utilisateur a cliqué...Sous Visual C#, il n'existe pas encore cette option...

Ce code permet donc 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 aussi que cette méthode est officielle (mais pas surdocumentée) contrairement à d'autres...

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

N'hésitez pas à commenter et à noter...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 janvier 2007 22:46:18 :
correction d'un bug de conversion short/int
17 mars 2008 22:27:28 :
ajout des arguments de la ligne de commandes EXTAssociation avec les classes Microsoft.Win32

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER
Source avec Zip Source .NET (Dotnet) OBTENIR LA LISTE DES PÉPRIPHÉRIQUES ÉJECTABLES (LES CLÉS USB...
Source avec Zip Source .NET (Dotnet) WIFIKEYVIEWER : LISTE DES PROFILES WIFI AVEC LEURS CLÉS/MOTS...
Source avec Zip Source .NET (Dotnet) NETSTAT: LISTE DES PORTS TCP/UDP OUVERTS AVEC LE PROCESSUS, ...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) EXPLORATEUR DE DOSSIERS ET FICHIERS par Yanith
Source avec Zip Source avec une capture Source .NET (Dotnet) ZIP-UNZIP AVEC SHARPZIPLIB par buno
Source avec Zip Source .NET (Dotnet) SUPER COPIER par casseur
Source .NET (Dotnet) SERIALIZATION/DESERIALIZATION COMPLÈTE DE CLASSES par DedeSurf
Source avec Zip CONVERSION DE FICHIERS FORTRAN 77 EN FORTRAN 95 par deadhand

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) INSTANCE UNIQUE + COMMUNICATION DE MESSAGES (COMPATIBLE 32 E... par taupe4
Source avec Zip Source .NET (Dotnet) UNE SEULE INSTANCE DE L'APPLICATION par keikun59
Source avec Zip Source .NET (Dotnet) GESTIONNAIRE DE SERVER ET CLIENT DDE (DYNAMIC DATA EXCHANGE) par BaFM
Source .NET (Dotnet) CD OPENER/CLOSER par WormkeyP
Source .NET (Dotnet) LANCER UNE SEULE INSTANCE D'UN APPLICATION par kbumbazz

Commentaires et avis

Commentaire de LUDINSKI le 13/04/2007 17:21:36

Salut ShareVB,

ça m'a l'air super intéressant cette histoire de DDE, il faut que je regarde ça de plus près...


En tous cas, bravo pour cette source
J'ai de quoi lire cette nuit ^^

Juste une chose, pourquoi n'as-tu pas utilisé la classe Registry pour accéder à la base de registre ? Tu avais déjà importé un packet de fonctions de l'API...

Commentaire de ShareVB le 13/04/2007 17:59:50

salut,

en fait, jusqu'il y a deux mois je traduisais les codes "à la bourrin" et depuis j'ai approfondi ma connaissance des classes .net pour passer des certif...mais depuis, je n'ai plus le temps de reprendre les codes ;)...

ShareVB

Commentaire de nerix27 le 14/06/2007 17:10:30

Salut !
Merci pour cette source.
Je cherche exactement ça pour un de mes progs.

Mais j'ai beau recopier ton code à la lettre (et en important les classes bien sur), ça ne marche pas dans mon appli, alors que ton appli fonctionne parfaitement.

J'ai essayé de recompiler ton appli pour voir si ça venait de moi, mais non, elle marche toujours.

J'ai essayé mon appli sur 2 postes différents (XP et 2000), ça plante sur les 2.

En fait, lorsque je double-clique sur le fichier, Windows me pond l'erreur suivante : [erreur]Windows ne trouve pas 'nom_du_fichier'. Vérifiez que vous avez entré le nom correctement et essayez à nouveau. Pour rechercher un fichier, cliquez sur le bouton Démarrer, puis sur Rechercher.[/erreur]

L'appli s'ouvre bien à chaque fois, mais à chaque fois, c'est une instance différente.

Est-ce que tu sais de quoi cela pourrait venir ?

Une petite interrogation : à quoi te sert la classe Program où tu exportes le Main ?


D'avance merci...

Commentaire de nerix27 le 14/06/2007 17:23:50

Petit bémol à ton appli quand même : j'ouvre une fois l'appli pour bien enregistrer le type de fichierr xyz. Je lance plusieurs fichiers par ci par là sur le dique, juste une instance donc tout va bien.
Mais dès que je ferme l'appli, et que je lance direct un fichier (l'ouverture de ce fichier est sensé créer l'instance unique), j'ai la même erreur que dans mon message ci-dessus. L'appli s'ouvre bien quand même, et l'ouverture d'autres fichiers par dessus ne pose pas de problème.
Donc technique pas très au point. As-tu quelques éclaircissements là dessus ?

D'avance merci...

Commentaire de godvicien le 15/03/2008 22:43:39 9/10

Excellent code. C'est exactement ce qu'il me fallait ;-)

Sur vista la classe EXTAssociation ne fonctionne pas. Surement du aux nouveaux droits d'accès à la base de registre.

Sinon en effet le premier double clic sur un fichier .xyz ouvre le soft, mais comme celui ci ne gére pas les lignes de commande il n'affiche pas de "open 1 params. nom_du_fichier.xyz".

Y aurait-il un bug de trouvage de fichier *.exe "%1" ??

Commentaire de ShareVB le 16/03/2008 10:30:23

salut,

pour vista, je pense effectivement qu'il faut être administrateur (et même run as administrator)...

pour le bug du premier lancement, effectivement, si je me souviens bien, je n'ai pas mis de traitement de ligne de commande...je mettrais à jour prochainement...

ShareVB

Commentaire de godvicien le 16/03/2008 16:12:34

Excellent !

Tout fonctionne sur mon soft, le transfert c'est fait sans problème.

En ce qui concerne la class EXTAssociation je la trouve très lourde, le framework .NET permet de manipuler les clés de registre beaucoup plus facilement.

Alors pour la remplacer il faut créer votre classe et bien suivre ce schéma de la base de registre :
(que vous pouvez stocker dans un fichier .reg, c'est ce que je fais pour outrepasser les droits de vista)
Il suffit de remplacer 'ed2k' par votre extension '.xyz'. En effet on peut créer son propre type de liens comme dans cette exemple :

[FichierTexte.reg]
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ed2k]
@="URL: ed2k Protocol"
"URL Protocol"=""
; cette ligne précédente est indispensable pour créer un protocole style "ed2K://votre_URL"

[HKEY_CLASSES_ROOT\ed2k\DefaultIcon]
@="C:\\Program Files\\eMule\\eMule.exe,0"

[HKEY_CLASSES_ROOT\ed2k\shell]
@="open"

[HKEY_CLASSES_ROOT\ed2k\shell\open]

[HKEY_CLASSES_ROOT\ed2k\shell\open\command]
@="\"C:\\Program Files\\eMule\\eMule.exe\" \"%1\""

[HKEY_CLASSES_ROOT\ed2k\shell\open\ddeexec]
@="[peeurl(\"%1\")]"

[HKEY_CLASSES_ROOT\ed2k\shell\open\ddeexec\Application]
@="eMule.exe"

[HKEY_CLASSES_ROOT\ed2k\shell\open\ddeexec\Topic]
@="P2P"

[/FichierTexte.reg]

Et lancer l'écoute des messages DDE avec ce code dans votre FormMain.Load() :

_ddeListener = new DDEListener(this.Handle, "eMule.exe", "P2P");
_ddeListener.OnReceiveCommand += new DDEListener.OnReceiveCommandDelegate(DDEListener_OnReceiveCommand);
_ddeListener.SubClass = true;

Et dans votre FormMain.Closing :
_ddeListener.SubClass = false;        

Voila j'espère avoir bien résumer le tout. Un grand merci pour cette source parfaitement documentée.

Commentaire de godvicien le 17/03/2008 15:22:11

Bon il me reste en effet un ultime bug de première ouverture de fichier.
On dirait que ca viens de l'OS.

Sinon j'ai une petite question : Ca sert à quoi ca :
_ddeListener.SubClass = true/false;

Ca veut dire quoi : "définit ou renvoie l'état du subclassing de la form" ??

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

form generique [ par zncpo ] bonjour, je voudrais ouvrir un formulaire avec son nom. en gros g le nom du formulaire en variable et j'aimerai pouvoir ouvrir une instance de ce for Empêcher un formulaire de s'ouvrir plus d'une fois. [ par BelleisaTQ ] Bonjour, J'ai un formulaire parent avec menustrip qui lorsque l'on clique sur un choix, ouvre un formulaire enfant.Pour empêcher le formulaire enfant Ouvrir mon DataReader??? [ par inoussyago ] problème d'instance [ par piwane ] bonjour, je cherche a utiliser indistinctement deux classes dans mon main : imaginez... j'ai donc deux classes, classA et classB qui ont les même ouvrir un fichier stocké dans la base [ par Souliabdo ] bonjour, je voudrais ouvrir un fichier (doc,xls,image...) stocké en byte dans ma base de données. voici un bout du cosde que j'ai fait: ============= Manipuler les commandes d'un programme ouvert [ par draonix ] Bonjour à tous, Je rencontre actuellement un problème concernant l'ouverture et la manipulation d'un programme .exe à partir de mon programme C#. En Liaison données dans une application multi-couches [ par Epitt ] Bonsoir, je me suis cassé la tête toute la journée pour afficher mes données selon le schéma qui suit, mais je n'arrive toujours pas à les afficher. ouvrir un fichier enregistré sur une autre pc [ par laymouna98 ] salut à tous Je traville une application avec C# et base Oracle, j'ai déployée mon application sur un autre serveur à laide de IIS, à partir de cette Une instance de classe métier pour plusieurs forms [ par darkgloom ] Bonjour, Je débute en c# et je suis confronté à un problème. Je suis en train de créer un programme composé de 2 fenêtres et d'une classe métier. Un Ouvrir tous les fichiers d'une direction donnée [ par babaOrhumette ] Bonjour, Je me permets de créer un nouveau sujet. J'essaie de créer un petit code qui ouvrent tous le fichiers contenu dans une direction figée par u


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales