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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par eric le mer. 17 juin 2015 12:11, modifié 1 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

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

#2

Message 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 !
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#3

Message 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
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

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

#4

Message 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.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#5

Message 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.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#6

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#7

Message 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)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#8

Message 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
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#9

Message 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
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#10

Message 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.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#11

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

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

#12

Message par eric »

Bonjour Walkson,

Merci pour le lien, je vais étudier cela.
Répondre