Intégration dans le menu contextuel de Windows Explorer

je veux écrire un petit outil, qui est le suivant:

lorsque vous cliquez avec le bouton droit de la souris sur un fichier avec une certaine extension, le menu contextuel de Windows Explorer affiche une entrée supplémentaire.

lorsque vous cliquez sur cette entrée un certain EXE est lancé avec ce fichier comme l'un de ses paramètres.

je voudrais utiliser C# / .NET 2.0 pour cela. Si ce n'est pas possible, je pourrais aussi le faire avec C++/Win32.

Mes questions sont:

  1. Est-il possible avec C # .NET 2.0?
  2. quelles sont les fonctions nécessaires à l'intégration dans le menu contextuel de Windows Explorer?
  3. comment rendre cela permanent? (Je ne veux pas relancer cet outil après chaque démarrage)
  4. qu'est-ce que je dois faire particulièrement attention? (différents OS, permissions de sécurité, etc.)
34
demandé sur Peter Mortensen 2009-12-03 12:50:43

3 réponses

vous aurez besoin d'accéder au registre et d'ajouter une clé sous root\File\shell ou root\Folder\shell, en fonction des éléments sur lesquels vous voulez que l'élément du menu soit visible.

cet article sur CodeProject, c'est très utile.

Edit: Il y a un autre article ici ce qui peut être utile.

24
répondu Mark Bell 2012-01-31 06:24:37

Tout ce que vous devez faire est d'ajouter quelques trucs au registre. Donc oui, vous pouvez le faire avec .NET 2.0. Voici un exemple de comment ajouter éditer avec Notepad.

%1 est le fichier sélectionné si je me souviens bien.

4
répondu Peter 2009-12-03 10:43:20

il n'est d'ailleurs pas supporté d'utiliser .NET pour les extensions shell, en raison de l'impossibilité actuelle d'héberger plusieurs versions d'exécution dans le même processus (.NET 4 supprimera cette restriction).

considérez le cas où vous avez deux extensions shell; une pour .NET 3.5, une pour .NET 1. Quelle exécution sera chargée dans votre processus? Eh bien, c'est plus ou moins aléatoire--ça dépend quelle extension de la coque est chargée en premier. Il peut parfois être le runtime 2.0, il peut parfois être le 1.1 de l'exécution.

C'est aussi un problème si un programme .NET crée des dialogues de fichiers communs; votre extension shell peut ou non se charger, et peut ou non s'exécuter avec la version d'exécution correcte.

en tant que tel, si vous descendez le Shell extension route vous devez utiliser natif C++ / COM / Win32.

3
répondu DrPizza 2009-12-03 10:05:35