A. Présentation |
Le but de cet exemple est de montrer comment on peut ajouter un élément au menu contextuel d'Internet Explorer 4.0 ou supérieur. Ce procédé est notamment utilisé par les programmes de téléchargements, les méta-moteurs...
Cet exemple va donc permettre à un programme de recevoir le titre et l'URL complète des liens sur lesquels on aura choisit de cliquer sur l'élément ajouté. Après installation de cet exemple, un clic sur MyDownload dans le menu contextuel affichera le texte et l'URL du lien dans notre programme. Cela fonctionnera que le programme soit actif ou non.
|
B. Présentation technique |
Cependant, ce n'est pas simple de faire le lien entre Internet Explorer et une application. En effet, Internet Explorer, afin de transmettre les URL, ne peut appeler qu'un script JS ou VB, ce qui implique qu'il y aura un intermédiaire entre notre application et Internet Explorer. Par conséquent, comme un script possède des restrictions sur un ordinateur, il n'est pas possible d'envoyer un message directement du script à l'application. Il y a donc un autre intermédiaire, spécifique à Windows, c'est un ActiveX, et ici un serveur COM.
Cet exemple utilise un serveur COM ; cela est du à la possibilité qu'un script puisse appeler les méthodes de ce serveur. Il faut cependant que Windows recense celui-ci, afin qu'il puisse appeler la bonne DLL, d'où l'utilisation de regsvr32.
Enfin, comme l'ActiveX est une DLL, il peut alors simplement appeler notre programme : soit il lui envoit un message car le programme est actif, soit si celui-ci est inactif, et il le lance en lui passant les informations du lien par la ligne de commande.
|
C. Eléments de l'exemple |
![]() |
![]() |
![]() |
|
|
![]() |
A. Mise en place de l'application résidente |
![]() |
![]() |
Cette étape sert juste à créer l'EXE qui n'est pas fourni pour économiser de l'espace, mais aucune modification n'est utile. L'emplacement de ce programme n'est pas important, mais devra être retenu, afin de l'inscrire dans la base de registre.
|
B. Mise en place du serveur COM |
![]() |
![]() |
De même, cette étape sert juste à créer la DLL. L'emplacement de la DLL n'est important, mais devra être retenu lors du recensement de celle-ci par Windows afin d'activer le serveur COM.
|
C. Installation du script |
![]() |
Il faut choisir ici un deux scripts, et retenir leur chemin complet, afin d'inscrire celui-ci dans la base de registre.
D. Création des liens Internet Explorer / Script |
|
![]() |
![]() |
Cette étape ajoute proprement dit l'élément dans le menu d'Internet Explorer. Dès la prochaine ouverture d'Internet explorer, celui-ci va directement ajouter l'élément dans son menu contextuel, bien qu'il ne soit pas encore fonctionnel.
Les valeurs de cette clé seront le lien entre le navigateur et le script : dès que l'on va cliquer sur le menu, Internet Explorer va exécuter directement le script. Ce script est celui dont le chemin est spécifié par la valeur chaine (Défaut).
La valeur entière Contexts sert à spécifier quand l'élément est ajouté dans le menu. En effet, il ne peut être ajouter que sur les liens, ou les images, ou seulement sur les formulaires.
![]() |
E. Création des liens Serveur COM / Application résidente |
|
Cette étape n'est pas obligatoire, mais a été ajoutée dans cet exemple, pour des raisons de simplicité et de compatibilité. En effet, elle permet au serveur COM de connaitre l'emplacement de l'application résidente, et de l'exécuter dans le cas où elle ne serait pas active.
![]() |
F. Installation du serveur COM |
|
L'étape permet de recenser le serveur COM. De ce fait, quand on appelera une méthode de la DLL dans le script, Windows pourra connaitre si la méthode existe, si l'objet propriétaire existe, et quelle DLL appeler pour exécuter cette méthode.
Il faut bien sûr remplacer {Chemin complet de la DLL} par le chemin complet de la DLL MyDownload_ComHost.dll.
G. Démarrage |
|
Bien que l'on modifie la base de registres, il n'est pas nécessaire de redémarrer. Il suffit de fermer toutes les fenêtres d'Internet Explorer, afin d'appliquer les changements, et que le nouvel élément du menu soit pris en compte.
![]() |
Il est possible de personnaliser cet exemple, de plusieurs façons
A. Modification du système |
Il est possible de modifier les constantes de l'unité MyDownload_CommonConsts, qui permet de modifier l'emplacement de la clé dans la base de registres, et le nom de la classe de la fiche réceptrice de l'application résidente.
|
B. Modification du comportement du script |
Il est possible de spécifier quand notre élément doit être ajouté dans le menu d'IE. Pour cela, il faut combiner une ou plusieurs des valeurs ci-dessous, avec l'opérateur OR, et de la stocker dans la valeur Contexts de la base de registre :
Contexte
|
Valeur
|
Fenêtre
|
$01
|
Images
|
$02
|
Controles
|
$04
|
Tableaux
|
$08
|
Texte sélectionné
|
$10
|
Lien
|
$20
|
Par exemple, si on veut que l'élement apparaisse sur les liens, il faut spécifier $20, mais si on veut que l'élément apparaisse aussi sur les images, il faut spécifier $22 ($20 OR $02).
![]() |
Pour désinstaller, il suffit de supprimer toutes les clés créées dans la base de registres, et d'exécuter ce programme :
|
|
Afin de désinstaller correctement, il suffit d'enlever la clée ajoutée dans MenuExt (II. D.), celle dans MyDownload (II. E.). Ensuite, il suffit de désinstaller la DLL, en exécutant de nouveau regsvr32, mais avec le paramètre de désinstallation.
![]() |
V. Installation et désinstallation automatique
Dans le répertoire Installation de l'exemple, il y a un programme exemple d'automatisation de l'installation de cet exemple. En effet, ce programme ajoute les clés dans la base de registres, et recense le serveur COM automatiquement ; il peut aussi désinstaller, en faisant l'opération inverse.
Cet installateur a été conçu à la fois pour montrer comment automatiser ces tâches, et aussi pour pouvoir tester l'exemple rapidement, ou le désinstaller simplement.
|
![]() |
VI. Sources et programmes exemples
![]() |
![]() |
Pour toutes suggestions, questions : contactez-moi par e-mail.
Mises à jours disponibles sur Phidels ou Admon.
![]() |
Exemple Extension du menu contextuel d'Internet Explorer - Adrien Montfaucon