[C++/C] Dynamic Data Exchange, messages Inter-Process

Dynamic Data Exchange, messages Inter-Process [C++/C] - Programmation

Marsh Posté le 13-11-2001 à 15:39:34    

Alors, dans mon appli, je veux, pour un fichier d'une extention donnée, faire exactement comme quand, dans l'explorateur Window, on fait bouton de dte sur le fichier, puis imprimer. Pour ça, je vais chercher dans la base de registre la ligne de commande associée à l'action "imprimer" du type de fichier. Mais en fait, des fois, la ligne de commande n'est pas suffisante. En plus de celle ci, le "Dynamic Data Exchange" (DDE) est utilisé.
Je peut récupérer la chaine de commande DDE associée à l'impression du type de fichier que je veux (par exemple: [REM _DDE_Minimize][FileOpen("%1" )][FilePrint 0][DocClose 2), pour word).  
Mais j'en fais quoi de ça !? qqn s'en est déja servi !?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 13-11-2001 à 15:39:34   

Reply

Marsh Posté le 13-11-2001 à 15:45:39    

Je sais juste que DDE, c un mode plus avancé que la ligne de commande pour la communication inter-process sous Windows. Puisque la ligne de commande ne peut être envoyée qu'au lancement du programme. Des messages DDE on peux en envoyer n'importe quand. Et à mon avis, ça va prendre beaucoup d'importance ce truc avec l'arrivée de windows XP, parce qu'a ce qu'y parais , les lignes de commande n'existent plus sous winXP

Reply

Marsh Posté le 13-11-2001 à 16:17:43    

pas d'idées les jeunes !? (les vieux aussi d'ailleurs !:D)

Reply

Marsh Posté le 13-11-2001 à 19:13:34    

Les DDE sont a éviter de nos jours (dixit kro$osft) mais j'ai une petite méthode qui permet de faire ca.
Tout d'abord il faut que tu créé une seule instance de ton programme (avec CreateMutex), ensuite dans ton main il faudra que tu fasses une fonction qui gere lpCmdLine (dans ton WinMain) qui récuperera donc l'argument.
Pour l'envoyer tu te servira du tout bete SendMessage (ou SendMessageTimeOut si ton appli mais un certain temps a se lancer), tu utilises WM_COPYDATA comme message (2 eme argument de SendMessage), et tu filleras une structure de type COPYDATASTRUCT. Voila en gros, c'est comme ca que je procede et ca marche plutot bien (pas X fois l'app qui se lance par exemple).

Reply

Marsh Posté le 14-11-2001 à 11:51:13    

Merci, ms j'comprends pas trop ton explication:
 
-moi g pas besoin de gérer la ligne de commande de mon appli, c pas lié ! je veux pas utiliser les DDE pour controler mon appli, je veux seulement envoyer un message DDE à une autre appli.
 
-Faire un CopyData, ok. Mais, dans ma structure COPYDATASTRUCT, je met quoi, un pointeur vers ma chaine de caractères DDE !?? (type: [REM _DDE_Minimize][FileOpen("%1" )][FilePrint 0][DocClose 2), pour word)
 
y suffit vraiement de faire ça pour que le message soit pris en compte par l'appli externe !?

Reply

Marsh Posté le 14-11-2001 à 12:05:56    

G compris ou tu veux en venir: tu me donne une méthode pour éviter les DDE. Merci, ms en fait g pas le choix: g une chaine de charactère qui contient un commande DDE, et je veux envoyer cette commande DDE à une appli !

Reply

Marsh Posté le 14-11-2001 à 12:44:42    

En VB(3), y avait des exemples qui marchaient pas mal pour télécommander PFE par ex ("OpenFile machin" ).
En C, ai pas encore réussi à m'en dépatouiller. Ai exemple Krosoft où ils ont écrit deux applis, l'une envoyant les commandes à l'autre (dessin télécommandé) mais c'est "spécifique" (sur mesure).
J'ai "écrit" (adapté un exemple Krosoft) une appli affichant les WMF et permettant d'exporter le presse-papiers quand dans ce format. Sous NT4, si on change l'appli qui doit afficher les WMF, on ne peut désactiver le DDE (sauf effacer la clé de la BdeRegistre). J'ai réussi à "envoyer aux oubliettes" la requète DDE que je ne sais comment gérer, mais on retrouve quand même le nom/path du fichier SUR LA LIGNE DE COMMANDE !!! Le DDE envoyé par l'explorateur doit compléter les infos( !) Je viens d'essayer d'associer "Imprimer" sous Explorateur sans DDE. Ca me charge le fichier sans plus.
 
Ca fait guère avancer les affaires... Y a des tonnes d'APIs pour DDE ! Je m'y suis noyé. :D

Reply

Marsh Posté le 14-11-2001 à 14:15:17    

G consulté la doc sur le sujet, ça parait relativement compliqué alors que c pour une fonction toute basique: je veux juste envoyer un message d'impression d'un fichier à une appli (qui peut être n'importe quelle appli: l'appli associée au type de doc à imprimer). Pour lancer un exe avec une commade d'impression, 2 cas de figure existe selon l'appli:
 
1- l'ordre se donne par un simple ligne de commande, un truc style NomAppli.exe \h c:\MonFichier.ext suffit.
 
2- l'appli doit être lancée par ligne de commande, puis l'ordre d'impression est envoyé par une commande DDE (qui est en effet le complément d'info dt tu parles, Carbon14).
 
Les cas 1 est bateau, le cas 2 est... trop chiant à gérer. G l'impression qu'on n'peux pas envoyer de commande DDE sans mettre en place toute une architecture DDE qui parait du genre "complexe".
Alors, si qqn sais envoyer de commandes DDE, merci de m'en parler. Si tu ne connais pas ça, t'arrête pas là, g une petite question: Dans le cas de figure que je viens d'exposer, on peut surement dire que MonAppli (celle qui doit envoyer les messages DDE) est Cliente, et que l'appli qui recevra le message d'impression est l'appli Serveur, non !?

 

[edtdd]--Message édité par El_Gringo--[/edtdd]

Reply

Marsh Posté le 14-11-2001 à 16:11:48    

hé !?

Reply

Marsh Posté le 14-11-2001 à 17:29:01    

hé bah, ça vous inspire pas on dirait !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed