Herezia.net

We are geeks. Resistance is futile. You will be assimilated.

Les “Shell Extensions”, maîtrisons Windows

with 2 comments

Bon… “maîtriser”, le mot est un peu fort. C’était juste pour me la péter.
Disons plutôt que Windows permet aux développeurs qui, par choix ou par obligation, ont besoin d’interagir avec cet OS.

Dans mon cas, c’est avec Explorer que je devais interagir afin d’élargir les possibilités offertes de base. Pour une application de gestion de fichiers, je devais permettre à l’utilisateur d’agir sur n fichiers.
En cliquant droit sur un tel ensemble, on affiche le menu contextuel, et on propose de lancer l’application qui contiendra une liste de cet ensemble de fichiers.

À partir de ce moment là on sourit, un petit tour dans la base de registre HKEY_CLASSES_ROOT\*
On créé alors une nouvelle clef en rajoutant le chemin vers l’application, et %1, en disantRegedit que ça prendrait en argument l’ensemble de fichiers…ahah. Bien naïf que je suis.
Car hélas, cette clef de la base de registre est gérée par le Shell d’une manière assez rigide.

Si on sélectionne 8 fichiers, on finit avec 8 occurrences de l’application de lancées. Youhou.
Sans vouloir faire l’anti-MS, je me suis simplement dit que…au moins depuis XP, les développeurs de Redmond auraient su implémenter cette fonctionnalité. Explorer n’étant pas open source, on ne peut qu’imaginer…
Explorer n’est qu’un GUI à moitié fait d’appels systèmes et d’HTML pour son rendu de navigation et reste donc incapable d’agir de manière un peu plus élaborée ?

J’aimerais avoir l’avis de sages linuxiens à ce sujet, comment est-ce géré ? (”rtfm” je sais) Les environnements graphiques (Gnome, KDE …) sont surement plus flexibles et “contextuels” ?

Quoi qu’il en soit, pour parvenir à mes fins, il a fallu utiliser les extensions de shell. C’est aléatoirement désagréable pour un développeur Java de réhabituer ses doigts à la brutalité du C++ (on peut le faire en Delphi ou C#, mais c’est moins sexy).
Me voilà à utiliser l’interface IShellExtension, et après avoir étudié le code de Glenn Car, à pondre une DLL valable qui m’écrive dans un fichier texte l’ensemble des fichiers et dossier sélectionnés. It’s a kind of magic
Une douce récursive dans le programme pour charger tous les fichiers et voilà mon périple windowsien terminé.

Petite remarque utile, ma boîte n’ayant pas de licence Microsoft Visual Studio C++, j’ai utilisé la version express, qui ne contient pas certaines librairies pourtant nécessaires (e.g. atl*.h).
Heureusement Microsoft a intelligemment mis à disposition le Windows® Server 2003 SP1 Platform SDK qui contient ces librairies, informez le linker de Visual Studio de leur répertoire et appréciez l’économie de 800$.
Une fois la DLL compilée, regsvr32 de l’extension de shell et apprécions le menu contextuel sous notre joug. *rire démoniaque*

Written by William

August 15th, 2008 at 3:43 pm

2 Responses to 'Les “Shell Extensions”, maîtrisons Windows'

Subscribe to comments with RSS or TrackBack to 'Les “Shell Extensions”, maîtrisons Windows'.

  1. Hello,

    Dans Nautilus, “l’explorateur” de Gnome donc sous GNU/linux, c’est le même cas que sous l’explorateur de Windows. Car les fichiers sont géré de façon indépendante au cas si un utilisateur veux lancer plusieurs fichier de type différents (Doc, ODT, PNG, JPG, …) !

    Kactoo

    15 Aug 08 at 4:14 pm

  2. J’y avais pas pensé, c’est pourtant tout bête ! Merci
    Il faut pas non plus rêver d’un %all à mettre dans une clef de registre et qui regrouperait tous les fichiers…

    William

    15 Aug 08 at 4:21 pm

Leave a Reply