Tutos geek

Tutoriaux linux, debian, android et autres

Ajouter un script home-made au menu contextuel de Windows

Pour ajouter un script au menu contextuel de Windows (click-droit sur un fichier ou un dossier) il va falloir passer par le registre.
Créez un fichier .reg comme ci-dessous, exécutez-le et les modifications apparaitront instantanément sans avoir besoin de rebooter.



Avant de démarrer, notez que vous pouvez ajouter un script lors d'un click-droit sur :
- Un dossier
- Tous les fichiers
- Un fichier d'un certain type
- Une zone vide dans un dossier (le "directory background")

et qu'il y a une différence assez importante entre :
- Ajouter un script
- Ajouter un sous-menu qui contiendra plusieurs scripts (comme sur ma capture d'écran au dessus)

Juste un script

Ajouter un script sur un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""
Le %1 enverra le chemin complet du dossier sur lequel vous avez cliqué en paramètre.

Ajouter un script sur une zone vide d'un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%V\""
Notez l'utilisation de %V à la place de %1 pour passer le chemin du dossier courant.


Ajouter un script pour tous les fichiers et dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Ajouter un script sur un certain type de fichier

Ici c'est en 2 temps.
Trouvez d'abord le type de fichier auquel vous souhaitez ajouter un script dans HKEY_CLASSES_ROOT Par exemple HKEY_CLASSES_ROOT\.reg
Notez la valeur de la clé, ici regfile, et créer le fichier suivant
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Un sous-menu contenant plusieurs scripts

Je ne vais pas vous remettre tous les cas de figure, vous déduirez sans peine les modification à apporter pour votre utilisation.

Ajouter un sous-menu sur les dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%1\""

A noter qu'en voulant aussi ajouter le sous-menu lors d'un click-droit sur le background d'un dossier je pensais m'en tirer simplement en ajoutant la clé
[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

mais apparemment on ne peut pas faire pointer 2 clés différentes sur le même SubCommands*, j'ai donc du dupliquer tout le fichier .reg et changer NOM_DU_SCRIPT_1 par NOM_DU_SCRIPT_1_BACK pour le résultat suivant :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1_BACK;NOM_DU_SCRIPT_2_BACK"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%V\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%V\""

Pour ajouter une barre de séparation entre 2 scripts ajoutez un pipe.
"SubCommands"="NOM_DU_SCRIPT_1;|;NOM_DU_SCRIPT_2"


*Si quelqu'un a une solution plus élégante je la prend volontiers.


Sources
Superuser
Askvg
Stackoverflow


Version
Windows 7 x64 - SP1