Page 1 sur 1

[R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 09:24
par eric
Bonjour,

J'aimerais ajouter à mon application la possibilité d'être lancé depuis le menu contextuel du clic droit de la souris.

En fonctionnement classique, l'utilisateur double clic sur le fichier exe de l'application et une boite de dialogue de sélection de dossier lui demande de choisir un chemin. (c'est de ce type là)

Code : Tout sélectionner

FileSelectFolder("Choisissez un dossier", "")
L'idée serait que au lieu d'exécuter le fichier exe, il puisse faire un clic droit sur un dossier depuis l'explorateur de fichier de Windows et choisir dans le menu un truc du genre : Analyser avec mon application.
Pour cela j'ai cru comprendre qu'il fallait passer par le registre de Windows.

Pour le début je pense avoir trouvé, mais n'hésitez pas à me corriger, je ne suis pas un expert du registre.

J'ai ajouté dans le registre une nouvelle clé dans : HKEY_CLASSES_ROOT\Directory\shell\Analyser avec mon application\command

Dans "command" j'ai modifié la valeur par défaut en ajoutant le chemin où se trouve mon fichier exe : "C:\lechemindemonapplication\lenomdemonapplication" "%1"

Si j'ai bien compris le "%1" à la fin récupère le chemin du dossier sur lequel l'utilisateur à fait le clic droit (Ca reste à confirmer)

En faisant cela, j'ai bien le texte "Analyser avec mon application" dans le menu contextuel et quand je clic dessus j'ai bien mon application qui se lance et la boite de dialogue de sélection de dossier qui s'ouvre.
Le problème c'est que je ne récupère pas le chemin du dossier sur lequel l'utilisateur a fait le clic droit.

Donc ma question est : comment pouvoir récupérer le chemin (le %1 du registre si j'ai bien compris) pour pouvoir l'inscrire dans la case "Dossier :" de ma boite de dialogue de sélection de dossier ?

Si vous avez une autre méthode pour le faire n'hésitez pas non plus.

Merci pour votre aide.

Eric

Re: [..] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 09:47
par ZDS
Bonjour,

Tu peux récupérer la donnée passée en paramètre (aka le nom du dossier dans ton cas) en utilisant $cmdLine ou $cmdLineRaw, deux variables utilisables dans tout script.

Par contre, je te conseille de changer la commande d'appel afin de faire quelque chose de plus "propre" (dans le sens réutilisable, polyvalent, et constant) : ajouter un paramètre "-folder" pour indiquer que ce qui suit est un folder.

Code : Tout sélectionner

"C:\lechemindemonapplication\lenomdemonapplication" -folder "%1"
Voici un exemple d'utilisation :

Code : Tout sélectionner

Global $dossier = "DOSSIER_PAR_DEFAUT"
For $i = 1 To $CmdLine[0]-1
    If $CmdLine[$i] = "-folder" Then $dossier = $CmdLine[$i+1] ; si on trouve "-folder" en $i alors le paramètre en $i+1 est le dossier en question
Next
A bientôt !

Re: [..] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 10:20
par eric
Merci ZDS cela fonctionne très bien.

Je ne connaissais pas ces variables $cmdLine et $cmdLineRaw. Je ne vois pas encore trop quelles informations peuvent venir s'y placer mais je vais creuser.

Sinon pour le -folder, étant donné que c'est dans HKEY_CLASSES_ROOT\Directory cela ne devrait pas être autre chose qu'un dossier normalement

Mais bon ça fait une sécurité en plus.

Par contre, à propos de la clé HKEY_CLASSES_ROOT\Directory, si j'y ajoute mon application, est ce que cela va apparaître dans le menu contextuel de tous les utilisateurs du PC ou seulement celui qui est actuellement connecté.

Dans le premier cas, y a t il un équivalent de HKEY_CLASSES_ROOT\Directory pour chaque utilisateur ?

Merci

Re: [..] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 10:36
par ZDS
Pour $cmdLineRaw, c'est tout simplement la totalité des paramètres lors de l'appel au programme qui y sont stockés. $cmdLine est un tableau où le premier élément est le nombre N de paramètres et chaque élément suivant de 1 à N est l'un de ces paramètres (plus simple à utiliser) : tableau de N+1 éléments, donc.

Pour le -folder, je ne parle pas de son utilisation via l'appel contextuel sur un dossier mais d'un cas général. Etant donné que tu vas utiliser $cmdLine, autant en faire quelque chose de stable et de se garder la possibilité (exemple bidon) de lancer ton prog en mode classique avec dossier par défaut en faisant :
"C:\lechemindemonapplication\lenomdemonapplication.exe"
ou de l'exécuter en mode contextuel en faisant :
"C:\lechemindemonapplication\lenomdemonapplication.exe" -folder "%1"
ou enfin de le lancer en mode débug en faisant :
"C:\lechemindemonapplication\lenomdemonapplication.exe" -debug
Plutôt que de voir ton script essayer d'ouvrir le dossier "-debug" et devoir gérer ce cas d'erreur (méthode que je considère "pas propre" ^^).

Sinon, pour avoir enregistré chez moi une clef dans "HKEY_CLASSES_ROOT\Directory\shell\FileRename\command" avec [ "D:\Outils\FileRename\FileRename.exe" -folder "%1" ] depuis mon compte admin, j'arrive à utiliser mon prog depuis mon autre compte restreint. Donc ça me semble pas déconnant de dire que tu devrais le voir chez tous les utilisateurs du PC.

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 12:32
par jguinch
HKEY_CLASS_ROOT n'est que "vue" qui permet d'accéder directement aux clés HKEY_LOCAL_MACHINE\SOFTWARE\Classes et HKEY_CURRENT_USER\SOFTWARE\Classes.
Si tu veux appliquer des modifications pour tous les utilisateurs, il faudra écrire dans HKEY_LOCAL_MACHINE\SOFTWARE\Classes (ou HKEY_CLASS_ROOT si tu es admin).
Pour un utilisateur donné, depuis sa session (ou en chargeant sa ruche utilisateur) écrire dans HKEY_CURRENT_USER\SOFTWARE\Classes.

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 14:22
par eric
Bonjour jguinch.

Merci pour ces précisions.

Je suis allé voir dans HKEY_CURRENT_USER\SOFTWARE\Classes mais je ne vois rien en rapport avec les dossiers.

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 17 juin 2015 18:28
par jguinch
C'est parce que la clé Directory n'existe pas par défaut dans HKCU\Software\Classes. Rien ne t'empêche de la créer (RegWrite créera la clé si elle n'existe pas)

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : ven. 19 juin 2015 09:57
par eric
J'ai ajouté la clé HKCU\Software\Classes\Directory\shell\Analyser avec mon application\command et cela apparaît bien dans le clic droit des dossiers.

Je ne sais pas si le "shell" était nécessaire mais bon...

Merci pour votre aide

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : sam. 25 juil. 2015 15:52
par eric
Bonjour,

Je reviens sur ce sujet par ce que l'ajout de la clé dans HKCU\Software\Classes\Directory\shell\Analyser avec mon application\command ajoute bien une entrée dans le clic droit sur les dossiers.

Par contre je ne vois pas mon application quand je fais un clic droit à la racine d'un disque.

Savez-vous ce qu'il faut ajouter pour que je vois aussi mon application en faisant un clic droit sur C: ou D: ?

Merci

Eric

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 02 sept. 2015 15:21
par eric
Bonjour,

Après quelques recherches, il faut remplacer

HKCU\Software\Classes\Directory\

par :

HKCU\Software\Classes\Folder\

Et là ça fonctionne aussi à la racine d'un disque.

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : mer. 02 sept. 2015 16:55
par walkson
Bonjour,
J'arrive avec "un poil de retard" mais avez vous vu le script de Guinness ? => https://www.autoitscript.com/forum/topi ... n-as-well/
Sauf erreur, il me semble qu'il répond à ce que vous voulez faire

Re: [R] Exécution depuis le menu contextuel du clic droit

Posté : jeu. 03 sept. 2015 09:56
par eric
Bonjour Walkson,

Merci pour le lien, je vais étudier cela.