Extension du shell : menu contextuel (win32 api)

Soyez le premier à donner votre avis sur cette source.

Vue 7 609 fois - Téléchargée 610 fois

Description

Définition:
-----------
Une extension du Shell est une DLL COM avec laquelle le Shell peut communiquer pour ajouter de nouvelles fonctionnalités. En plus d'exporter les fonctions DllRegisterServer(), DllUnregisterServer(), DllCanUnloadNow() et DllGetClassObject(), cette DLL COM doit aussi implémenter les interfaces IClassFactory et IShellExtInit. Dans notre cas, elle doit aussi implémenter l'interface IContextMenu. Ces dernières permettent d'ajouter des éléments au menu contextuel du Shell et d'exécuter les actions adéquates une fois l'un de ces éléments est choisi.

Fonctionnalités de notre extension:
-----------------------------------
- Ajouter au menu contextuel du Shell un sous-menu "Chemin" contenant deux éléments. Le premier élément sert à copier le chemin dans le clipboard. Le deuxième élément affiche ce chemin dans une MessageBox().
- Ce sous-menu s'applique à tous les types de fichiers, aux dossiers, au bureau et à l'arrière-plan des fenêtres de l'explorateur.
- Ajouter l'élément "Voir le fichier FCH" au menu contextuel du Shell pour les fichiers portant l'extension .FCH. Ce type de fichier est péalablement inscrit dans la base de registre au moment de l'enregistrement de notre DLL. Une fois cet élément est choisi, le fichier sera ouvert avec le Bloc-notes.
- Ajouter "Créer un nouveau fichier FCH" au menu contextuel du bureau ou de l'arrière-plan des fenêtres de l'explorateur. Quand cet élément est choisi un nouveau fichier FCH est créé sur le bureau ou dans le dossier courant de la fenêtre de l'explorateur.

Utilisation:
------------
Pour utiliser cette extension du Shell, il est péférable de coller notre DLL dans le dossier System32. On l'enregistre en tapant "regsvr32 racppextension.dll" dans "l'invite de commandes". Sous Vista, ce dernier doit être exécuté en tant qu'administrateur. Si cette DLL se trouve dans un dossier différent de system32, il faudra fournir son chemin complet. On peut vérifier le fonctionnement de notre extension en faisant un clic droit sur le bureau par exemple. Dans le menu contextuel qui apparait, on verra les éléments nouvellement ajoutés. Pour déenregistrer notre DLL, il suffira de taper "regsvr32 -u racppextension.dll". Tout a été testé sans problème sous XP et Vista.

Code:
-----
Ce code source est un exemple de création de DLL Objet COM sans faire appel aux MFC ni aux ATL. Il s'agit donc d'un projet DLL normale réalisé avec Visual C/C++ 2005. Il est facilement adaptable aux autres outils car il est 100% Win32 API. L'icone par défaut de notre type de fichier .FCH est incluse comme ressource à la DLL. La gestion des erreurs est minimale dans ce code pour raison de clarté. Pour tester directement la DLL du zip,renommez la en racppextension.dll.

Tous les commentaires, remarques ou questions sont les bienvenus.

Source / Exemple :


Voir le zip.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

UndeadG
Messages postés
1
Date d'inscription
lundi 16 octobre 2006
Statut
Membre
Dernière intervention
13 avril 2011

Enfin,je trouve du code correspondant à cette question que je me posais (la msdn est bien gentille,mais manquait d'exemple,j'avais même pas compris où intervenait IClassFactory ),merci beaucoup Racpp.
ciberrique
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010

Bonjour,
Impossible à faire fonctionner sous Seven.
Des idées ?

Merci.
Roro7302
Messages postés
2
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
24 avril 2010

LeFauve42 : Désolé pour le retard.
Je parlais de la version inclus dans le zip.
LeFauve42
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Roro7302: Tu parles de la DLL incluse dans le zip, ou bien d'une version que tu as recompilee en 64 bits ?
Roro7302
Messages postés
2
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
24 avril 2010

Très bonne extension :)
Dommage que ça ne marche pas sur du 64 Bits :(

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.