Retransmission de tous les paramètres vers une seule application lors de l'ouverture simultanée de plusieurs fichiers dans l

0/5 (10 avis)

Vue 7 050 fois - Téléchargée 559 fois


Description

J'ai fait ce petit code en réponse à une question posée dans le forum par ActiveX : http://www.delphifr.com/forum.v2.aspx?ID=454159

Conclusion :


Voilà quelques explications...

L'explorateur windows ouvre chaque fichier sélectionné avec des instances différentes d'une application. Par exemple, si on sélectionne trois images bitmap et qu'on les ouvre simultanément, on aura sur l'écran 3 fenêtres MsPaint... C'est normal car windows ouvre une première fois mspaint avec le premier fichier en paramètre, puis une deuxième fois (donc dans une autre instance) avec le deuxième fichier en paramètre, et enfin une troisième fois avec le troisième fichier en paramètre. Chaque instance de mspaint ne reçoit donc qu'un seul paramètre et on se retrouve avec trois fenêtres différentes... C'était le problème d'ActiveX.

L'objectif de cette source est de permettre, lors de l'ouverture de plusieurs fichiers depuis l'explorateur de rassembler tous les paramètres et de les transmettre à une seule application qui saura les gérer tous (par exemple, dans word, si plusieurs documents sont ouverts en même temps, ils sont tous dans des fenêtres enfant et la fenêtre parent les contrôle).

Revenons à l'exemple du début, avec les trois bitmap :
Quand l'explorateur ouvre la première instance de l'application, celle-ci (l'appliation 1) va se lancer normalement et va se préparer à recevoir les messages des autres instances ouvertes par la suite. Lors de l'ouverture de la deuxième instance, celle-ci va détecter qu'une instance est déjà lancée (l'application 1) et va envoyer les paramètres qu'elle a en entrée via messages systèmes à la première application qui va les recevoir et les ajouter à sa liste de paramètres. La deuxième application, une fois l'envoi fini, se termine. La troisième en fera de même. On arrive au final à récupérer les trois paramètres dans une seule application (utile pour les logiciels de traitement de texte ou d'édition photo...).

J'utilise des atoms pour transférer des chaînes de caractères par messages.

Etant donné qu'il est impossible d'éditer la ligne de commande elle-même de l'application lors de l'exécution, les paramètres que l'application reçoit sont stockés dans une TStringList nommée "params". Pour accéder au Xième paramètre , il suffit de faire params[X]. Pour en avoir le nombre total, il faut faire params.Count. Rien de plus simple ;)

Je suis ouvert à toutes vos remarques et suggestions... :p

Codes Sources

A voir également

Ajouter un commentaire Commentaires
ActiveX Messages postés 32 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 22 janvier 2008
12 mai 2005 à 18:55
C'est bien cela à priori cela a l'air très bon mais je vais tous regarder cela ce soir après le travail.

Je savais bien qu'il existait une autre façon.

je t'en redonne des nouvelle.

ActiveX.
ActiveX Messages postés 32 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 22 janvier 2008
12 mai 2005 à 18:55
C'est bien cela à priori cela a l'air très bon mais je vais tous regarder cela ce soir après le travail.

Je savais bien qu'il existait une autre façon.

je t'en redonne des nouvelle.

ActiveX.
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 11
12 mai 2005 à 17:51
Mise à jour majeure avec une refonte totale du principe de communication : L'utilisation du fichier texte, un peu bricolée a été remplacée par l'utilisation de messages système...

@+
Nico
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
12 mai 2005 à 07:28
ok, j ai bien compris.

sinon, aurais tu une idee autre que le fichier texte pour transmettre les parametres?
ActiveX Messages postés 32 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 22 janvier 2008
12 mai 2005 à 05:54
Tout va bien, l'erreur s'était simplement un oublie de ta part au lieu d'écrire

CreateMutex (nil, False, 'Project1');

Tu avais écrit

CreateMutex (nil, False, 'MonApplication');

j'ai corrigé le tous, et tout va bien.

merci du coup de main.

ActiveX
Afficher les 10 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.