Recherche
1 connecté

  Actuellement : 0 commentaire Extension du menu contextuel d'Internet Explorer

 

I. Introduction
  A. Présentation
  B. Présentation technique
  C. Éléments de l'exemple
II. Installation
  A. Mise en place de l'application résidente
  B. Mise en place du serveur COM
  C. Installation du script
  D. Création des liens Internet Explorer / Script
  E. Création des liens Serveur COM / Application résidente
  F. Installation du serveur COM
  G. Démarrage
III. Personnalisation
  A. Modifications du système
  B. Modifications de comportement du script
IV. Désinstallation
V. Installation et désinstallation automatique
VI. Sources et programme exemple

 

I. Introduction

  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.

Un installateur est fourni avec l'exemple qui permet de faire toutes les étapes à partir de II. C. Il n'est cependant fourni que pour montrer comment automatiser ces opérations, désinstaller facilement, ou faire de rapides tests.

 

  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.

De par la nature de l'exemple, il faudra modifier la base de registres. Il ne faudra qu'ajouter des clés et des valeurs ; le risque est donc presque nul, mais il est conseillé d'en faire une sauvegarde.

 

  C. Eléments de l'exemple

 

Application résidente : c'est le nom qui est donné au programme qui recevra les liens, ça pourrait être un programme de téléchargement, ou autre. On peut facilement transformer un programme normal en un programme qui pourra communiquer avec Internet Explorer. Dans l'exemple, c'est le projet MyDownload.dpr.
Serveur COM : c'est la DLL qui contient le code de l'ActiveX, sa fonction est de faire l'intermédiaire entre le script (et donc Internet Explorer) et l'application résidente. Dans l'exemple, c'est le projet MyDownload_ComHost.dpr.
Script : c'est un script JS ou VB, qui sera l'interlocuteur direct avec Internet Explorer, et qui appelera une méthode du serveur COM pour passer le lien à l'application résidente. Dans l'exemple, il y a deux scripts, un en VB (DownloadVB.htm) et l'autre en JS (Download.htm), cependant ils sont là à titre d'exemple, et peuvent utilisés indifferement, du fait qu'is possèdent exactement le même code dans leur langage respectif.

 

Il est tout à fait possible de se passer de l'application résidente, et que l'ActiveX s'occupe de toutes les opérations. Cependant pour simplifier l'exemple, une fiche étant plus difficile à inclure dans une DLL, c'est l'application résidente qui aura ici le rôle d'interface avec l'utilisateur.

De plus, dans la plupart des cas, c'est une application qui possède une fonctionnalité supplémentaire de pouvoir intéragir avec Internet Explorer, et non une unique DLL qui aura une seule fonctionnalité.

 

Lorsqu'il faut retenir ou inscrire le chemin d'un élément, il faut toujours que le chemin soit complet, donc pas de constante du type %System%, pas d'utilisation de la variable d'environnement PATH, et pas de chemin relatif à un dossier. Sinon, l'exemple ne marchera pas ou mal.

 

II. Installation

  A. Mise en place de l'application résidente

 

Ouvrir MyDowload.dpr
Construire le projet (Projet / Construire MyDownload)

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.

Il faut impérativement fermer ce projet de l'IDE de Delphi avant de lancer l'exemple. Il peut en effet avoir un conflit de nom de fenêtres, ce qui peut empêcher le bon fonctionnement de l'exemple.

 

  B. Mise en place du serveur COM

 

Ouvrir MyDowload_ComHost.dpr
Construire le projet (Projet / Construire MyDownload_ComHost)

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.

Lors de la personnalisation de l'exemple, il est conseillé de toujours reconstruire la DLL avant de d'essayer. Il peut aussi arriver que l'on soit obligé de désinstaller la DLL avec regsvr32, puis de la recenser une nouvelle fois.

 

  C. Installation du script

 

Copier le fichier Download.htm (version JS), ou DownloadVB.htm (version VB), sachant qu'ils possèdent tous deux les mêmes fonctionnalités

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

 

Créer une clé dans HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt, le nom de cette clé sera la chaine qui apparaitra comme titre de l'élément du menu, on peut utiliser le caractère "&" pour souligner une lettre pour un raccourci clavier. Par exemple, si l'on créé une clé : HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&Télécharger avec mon programme, dans Internet Explorer, il apparaitra Télécharger avec mon programme.

Modifier la valeur (Défaut) de cette clé, pour qu'elle contienne le chemin complet du script VB ou JS
Ajouter une valeur hexadécimale, nommée Contexts, qui aura pour valeur $20, ce qui indiquera à IE de n'afficher notre élément que sur les liens.

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

 

Créer une clé HKEY_LOCAL_MACHINE\Software\MyDownload, et modifier la valeur Défaut pour qu'elle contienne le chemin complet de l'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

 

Exécuter le programme suivant :

regsvr32 /s "{Chemin complet de la DLL}\MyDownload_ComHost.dll"

 

Il faut veiller à ne pas oublier les guillemets autour d'un chemin contenant des espaces.

 

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

 

Fermer toutes les fenêtres d'Internet Explorer, et normalement, tout marche correctement.

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.

 

III. Personnalisation

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.

Si vous modifiez cette unité, vous ne pourrez plus utiliser l'installateur automatique.

 

 

  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).

 

IV. Désinstallation

Pour désinstaller, il suffit de supprimer toutes les clés créées dans la base de registres, et d'exécuter ce programme :

regsvr32 /u /s "{Chemin complet de la DLL}\MyDownload_ComHost.dll"

 

Il faut veiller à ne pas oublier les guillemets autour d'un chemin contenant des espaces.

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.

Ce programme est conçu uniquement pour l'exemple non modifié, il ne reconnait que les fichiers de l'exemple, et crée les clés dans la base de registre à l'emplacement par défaut.

Ainsi, il n'est capable de désinstaller que l'exemple standard : si vous avez par exemple modifié la valeur de HostPathKey dans l'unité commune (MyDownload_CommonConsts), le programme sera incapable de le désinstaller par la suite.

 

VI. Sources et programmes exemples

Télécharger l'exemple complet (cette page d'explication, l'exemple et l'installateur automatique)

 

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