2009-12-03 16 views
33

Je veux écrire un petit outil, qui effectue les opérations suivantes:Intégration dans le menu contextuel de l'Explorateur Windows

Lorsque vous faites un clic droit sur un fichier avec un certain extension de fichier dans le menu contextuel de l'Explorateur Windows 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 les suivantes:

  1. Est-il possible avec C# .NET 2.0?
  2. Quelles sont les fonctions nécessaires à l'intégration dans le menu contextuel de l'explorateur Windows?
  3. Comment puis-je rendre cela permanent? (Je ne veux pas relancer cet outil après chaque démarrage)
  4. De quoi dois-je faire particulièrement attention? (OS différent, autorisations de sécurité, etc.)

Répondre

4

Tout ce que vous avez à faire est d'ajouter des éléments au registre. Alors oui, vous pouvez le faire avec .NET 2.0. Voici un example of how to add Edit with Notepad.

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

+2

Cela ne fonctionnera pas sous Vista et Win7. Seulement sous XP et 2000. Je ne sais pas pourquoi. –

+1

Je pense que les chemins de registre sont différents, mais cela devrait fonctionner: http://www.vistax64.com/tutorials/89829-start-menu-customize-context-menu.html –

22

Vous devrez accéder au registre et ajouter une clé sous root\\File\\shell ou root\Folder\\shell, en fonction des éléments sur lesquels vous souhaitez que l'élément de menu soit visible. Essayez this article at CodeProject, c'est très utile.

Editer: Il y a another article here qui peut être utile.

+0

http://www.codeproject.com /KB/cs/dateparser.aspx – Kiquenet

+0

+1 pour le lien vers le grand projet de menu contextuel 'shell simple'. –

+0

Toujours utile, merci Mark –

3

Il n'est d'ailleurs pas possible 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 lèvera cette restriction).

Considérons le cas où vous avez deux extensions shell; un pour .NET 3.5, un pour .NET 1. Quel runtime sera chargé dans votre processus? Eh bien, c'est plus ou moins aléatoire - cela dépend de quelle extension de shell est chargée en premier. Parfois, il peut s'agir de l'exécution 2.0, parfois de l'exécution 1.1.

Ceci est également un problème si un programme .NET crée des boîtes de dialogue de fichiers communes; votre extension shell peut ou ne peut pas charger, et peut ou non fonctionner avec la version d'exécution correcte. En tant que tel, si vous descendez le Shell extension route vous devez utiliser C++/COM/Win32 natif.

+0

Le dernier environnement d'exécution .Net 4.0 prend en charge le processus de chargement côte à côte de l'environnement d'exécution .Net 4.0 (et de TOUS les futurs runtimes) avec des runtimes .Net antérieures. Voir l'extrait suivant de http://msdn.microsoft.com/en-us/magazine/ee819091.aspx "Avec la possibilité d'avoir plusieurs runtimes en cours avec n'importe quel autre runtime, nous pouvons maintenant offrir un support général pour l'écriture gérée les extensions shell, même celles qui s'exécutent avec des applications arbitraires sur la machine. " – logicnp