web-dev-qa-db-fra.com

Intégration dans le menu contextuel de l'Explorateur Windows

Je veux écrire un petit outil, qui fait ce qui suit:

Lorsque vous cliquez avec le bouton droit sur un fichier avec une certaine extension de fichier, 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:

  1. Est-ce 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? (différents OS, autorisations de sécurité, etc.)
39
clamp

Vous devrez accéder au registre et ajouter une clé sous root\\File\\Shell ou root\Folder\\Shell, selon les éléments sur lesquels vous souhaitez que l'élément de menu soit visible.

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

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

26
Mark Bell

Par ailleurs, l'utilisation des extensions .NET pour Shell n'est pas prise en charge, en raison de l'incapacité actuelle d'héberger plusieurs versions d'exécution dans le même processus (.NET 4 lèvera cette restriction).

Considérez 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 l'extension Shell chargée en premier. Parfois, il peut s'agir du runtime 2.0, parfois du runtime 1.1.

C'est également un problème si un programme .NET crée des boîtes de dialogue de fichier communes; votre extension Shell peut se charger ou non, et peut ou non s'exécuter avec la version d'exécution correcte.

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

3
DrPizza