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

Soyez le premier à donner votre avis sur cette source.

Vue 6 876 fois - Téléchargée 537 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
Messages postés
32
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
22 janvier 2008

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.
Messages postés
32
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
22 janvier 2008

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.
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
13
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
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
ok, j ai bien compris.

sinon, aurais tu une idee autre que le fichier texte pour transmettre les parametres?
Messages postés
32
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
22 janvier 2008

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.