[R] Path d'un fichier / menu contextuel

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

[R] Path d'un fichier / menu contextuel

#1

Message par DimVar »

Bonjour,

Le projet : Faire un clic droit sur un fichier MP3 et "ajouter à la liste".
Lors du clic droit, dans le menu contextuel, une entrée "ajouter à la liste", qui récupérerait le path complet du fichier. Puis ajout dans un fichier M3U.
Le but est de créer rapidement depuis une arborescence, un fichier M3U (playlist winamp).

Comment procéderiez vous pour récupérer le path complet du fichier ?

Merci.
Cdlt, Dimvar.
Modifié en dernier par DimVar le lun. 04 nov. 2019 20:24, modifié 3 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#2

Message par mikell »

Je m'étais fait un truc comme ça dans le temps
Pour tester, ajoute ces 2 clés dans le registre

[HKEY_CLASSES_ROOT\mp3file\shell\monscript\command]
@="C:\\monscript.exe \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mp3file\shell\monscript\command]
@="C:\\monscript.exe \"%1\""

puis fais un .au3 avec juste ça : msgbox(0,"", $CmdLine[1]) , compile-le en "monscript.exe" , et mets-le dans C:

Il te faudra peut-être adapter les clés de registre pour ton OS mais c'est l'idée :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
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: [..] Path d'un fichier / menu contextuel

#3

Message par walkson »

Bonjour,
Il y a aussi l' UDF de Guinness https://www.autoitscript.com/forum/topi ... n-as-well/ qui fait la même chose de ce que propose Michel mais avec des options. Ça date de 2011 mais ça fonctionne sous win7 (sous win10 ???)
Toujours en reprenant l'idée de Michel, vous pouvez lancer une GUI en cliquant sur l'exe pour d'éventuelles options (créer ou supprimer des raccourcis etc..)
If $CmdLine[0] Then
;votre code pour créer votre fichier M3U
Else
   Form(); la gui
EndIf
mais vous connaissez peut être déjà ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#4

Message par DimVar »

Merci à vous 2, mais la seule question etait : "Comment procéderiez vous pour récupérer le path complet du fichier ? :mrgreen:
"
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#5

Message par mikell »

Certes. Mais la question s'inscrivant dans le contexte d'un projet, la sortir de ce contexte eût risqué d'entrainer une réponse inappropriée 8)
Est-ce à dire que ces réponses ne te satisfont pas ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#6

Message par DimVar »

Peut etre n'ai je pas compris le principe alors ?
Comment, le script, peut me retourner le path du fichier sur lequel j'ai cliqué, avec juste le parametre $CmdLine[1] ?

[EDIT] Pkoi y a t'il un double antislash ? Si le chemin de mon script est dans un sous dossier à la racine de C: , la valeur sera t'elle c:\\temp\\m3u.exe ?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#7

Message par DimVar »

Bon, peut etre l'un d'entre vous a deja été confronté au pb...
j'ajoute HKEY_CLASSES_ROOT\exefile\shell\m3u\, j'ai bien un nouveau menu "m3u"quand je fais clic droit sur un exe.
j'ajoute HKEY_CLASSES_ROOT\mp3file\shell\m3u\, je n'ai pas de nouveau menu quand je fais clic droit sur un mp3.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#8

Message par DimVar »

Bon, il semble que la bonne cle soit : HKEY_CLASSES_ROOT\SystemFileAssociations\audio\shell\m3u
Si ca peut servir à qqun.
En effet, une fois que l'on a la bonne clef, je vois bien que le script renvoi (grace à explorer ?), le path du fichier.

Merci à vous.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#9

Message par Tlem »

Bonjour DimVar.
L'utilisation du double antislash est une spécificité "lié à la base de registre Windows". Donc ne pas se prendre la tête avec ça est simplement doubler les antislash.

Concernant la récupération du chemin complet, si vous utilisez le menu contextuel et donc une entrée dans la base de registre tel que décrit par Michel, c'est %1 qu'il faudra utiliser.
Le but étant de donner une commande dans cette fameuse ligne de base de registre afin d'exploiter la valeur %1.

Vous pourriez tout aussi bien utiliser simplement la commande Echo afin de rajouter à votre fichier m3u le fichier sélectionné, mais vous risquez d'avoir un gros problème lors de la sélection multiple ...
Du coup Michel vous a orienté vers l'utilisation d'un script AutoIt afin de traiter la ligne de commande renvoyé et donc de traiter les données du %1.

Donc, soit vous êtes sur de faire de la sélection simple et la, la simple commande "Echo >> Chemin\\NomDuFichier.m3u" devrait suffire.
Soit vous pensez éventuellement faire de la sélection multiple et là vous devrez passer par un script AutoIt qui recevra les informations du fameux %1 que vous devrez traiter afin d'en extraire le ou les chemins et noms de fichiers en utilisant tel que Michel vous l'a indiqué, la commande $CmdLine. Avantage du script : Vous pouvez utiliser le Drag&Drop

Voilà, j'espère que cela vous aidera dans votre projet.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#10

Message par DimVar »

Merci pour ce complément d'info. Mais malheureusement pour vous, un complément d'infos est souvent source de nouvelles questions :mrgreen:

1)
J'ai tenté d'utiliser la valeur recommandé par Mikell, mais j'ai un msg d'erreur.
@="c:\\temp\\m3u.exe" \"%1\""
Est ce une syntaxe propre à windows 7 et inferieur ?
J'ai donc procédé comme suit :
"c:\temp\m3u.exe" "%1"

2)
Concerant la selection multiple, j'ai tenté d'afficher les valeurs du tableau $cmdline, mais lorsque que je selectionne plusieurs fichiers dans l'explorer windows et que je click droit pour lancer l'action, seule le premier fichier est pris en compte.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
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: [..] Path d'un fichier / menu contextuel

#11

Message par walkson »

Pour la question 2, il faut faire une boucle
   For $i = 1 To $CmdLine[0]

   $chemin = $CmdLine[$i]

   Next
On peut aussi utiliser cela qui retourne un array
#include <Array.au3>
#include <WinAPIShPath.au3>

; An alternative to the limitation of $CmdLine[] only being able to return a maximum of 63 parameters.
Local $aCmdLine = _WinAPI_CommandLineToArgv($CmdLineRaw)
_ArrayDisplay($aCmdLine)
Toujours à compiler
Pour le menu contextuel, il y a ce programme portable assez simple à utiliser
https://www.nirsoft.net/utils/file_types_manager.html
https://www.virustotal.com/gui/file/8c3 ... /detection (pour vérification)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#12

Message par DimVar »

walkson a écrit : lun. 04 nov. 2019 16:13 Pour la question 2, il faut faire une boucle...
Merci Walkson, mais je sais afficher un tableau :P :wink:

Je garde l'utilitaire nirsoft pour plus tard, si je ne trouve pas d'autres solutions. (j'attends d'autres réponses éventuelles)
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#13

Message par Tlem »

Pour le 1, l'essentiel, c'est que ça fonctionne. ^^
Pour le 2, il faut voir ce que vous renvoie $CmdLineRaw. Un seul nom de fichier ou plusieurs ???
En multisélection, vous devriez avoir plusieurs éléments. A vous de faire le traitement nécessaire. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#14

Message par mikell »

Oy , voici qu'on se décarcasse pour répondre (enfin moi un ptit peu, mais walkson beaucoup), voici que même Thierry pond le paragraphe qui va bien dans un français inhabituellement impeccable, bref voici que tout ce qu'il faut est réuni pour fournir au user un point de départ solide, donc là on se dit que le user avec 830 messages au compteur il saura se démerbrouiller avec ça pour mener à bien son projet. Mais non, voilà que le user n'est pas content, et il fronce le nez, et il ergote, et il pinaille :roll:

Rha la la ces assistés :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#15

Message par DimVar »

M'enfin ! (dixit gaston)
Je pinaille pô !
- Je prends en compte les remarques de Walkson (que j'utiliserai plus tard si la solution outil windows ne fonctionne pas).
- Je prends en compte les remarques de Thierry, mais désolé, les double"\" ne semblent pas fonctionner sur WIN10 ?!?! (je peux joindre un prtscreen des clef de registre si besoin)
- Je prends en compte les conseils du chat vert, qui rejoignent un peu celles de Thierry, mais idem, msg d'erreur.

Du coup, je vais mettre des smileys, de la politesse et faire des efforts à tester avant de poster :P

Je recommence :

Bonjour à tous, Tlem, Mikell et Walson.

J'espere que vous allez bien, bla bla... :mrgreen:
Lorsque j'ajoute cette key au registre : [HKEY_CLASSES_ROOT\mp3file\shell\M3u\command] puis la valeur par defaut reg_sz : @="C:\\temp\\m3u.exe \"%1\""
dont le code de m3u.exe est :
Local $pathFile = ""

$pathFile = $CmdLine[1]
MsgBox(0,"",$CmdLine[1]) ;verifie le path file

_RecordMp3 ()

Func _RecordMp3 ()

$fo = FileOpen ("c:\temp\Temp.m3u",1)
   FileWriteLine ($fo,$pathFile)
   FileClose ($fo)

EndFunc
Et que je fais click droit sur un fichier *.mp3, aucune entrée au menu contextuel n'est présente.
OS : win10 Pro

Je vais donc plutot travailler avec cette registry key (sauf si vous avez une idee du pb) :
Ordinateur\HKEY_CLASSES_ROOT\SystemFileAssociations\.mp3\shell\m3u
Où là, j'ai bien une nouvelle entree "M3u" dans le menu contextuel.
Mais lorsque j'ajoute la valeur par defaut reg_sz : @="C:\\temp\\m3u.exe \"%1\"" et je tente de faire un click droit dessus, avec pour action "m3u", voila le msg d'erreur :
Image

Voila pourquoi j'utilise desormais comme valeur de cle par defaut : "C:\temp\m3u.exe" "%1"
Et là le script fonctionne, j'ai bien la msgbox qui confirme le path file.


Si deja vous avez des reponses à m'apporter sur ces pb de registry key, je peux passer au point 2, la multi selection.

:bisou: à tous :mrgreen:

PS : 800 msg à aider autrui sur des questions basiques et à saluer et souhaiter la bienvenue, ne feront jamais de moi, les personnes exeptionnelles que vous etes ! :mrgreen: :D


@Tlem
$cmdlineraw me renvoi ceci :
Image
Deux popup de msgbox simultanées.

Dont le script est :
#Include <Array.au3>
Local $pathFile = ""

$pathFile = $CmdLine[1]
MsgBox(0,"M3u",$CmdLineraw) ;verifie le path file
;~ _ArrayDisplay ($CmdLine)

_RecordMp3 ()

Func _RecordMp3 ()

$fo = FileOpen ("c:\temp\Temp.m3u",1)
   FileWriteLine ($fo,$pathFile)
   FileClose ($fo)

EndFunc
Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#16

Message par Tlem »

Alors, concernant la clé de base de registre, l'essentiel c'est que celle que vous utilisez fonctionne. Parfois d'un système à l'autre les choses sont différentes. Il ne faut pas se formaliser la dessus.
Concernant les doubles slash, effectivement parfois il les faut et parfois non. La encore, l'essentiel c'est de tester et de trouver. ^^

Concernant le retour de $cmdlineraw, je suis dubitatif, car il semblerait que les deux noms soient bien envoyés, mais en plusieurs fois alors que je m''attendais à avoir une ligne avec plusieurs noms.
Bref si le fonctionnement du menu contextuel est l'envoi des noms de fichiers et le lancement de l'exe pour chaque nom, il suffit de traiter cela comme si vous traitiez un seul fichier tel que vous l'avez dans votre dernier code. Après si j'ai bien compris, seul le premier fichier est pris en compte, du coup il faut essayer de comprendre pourquoi MsgBox(0,"M3u",$CmdLineraw) renvoi bien le nom des deux fichiers (probablement par le lancement de l'exe de manière consécutive) et pourquoi la fonction _RecordMp3 () ne rajoute pas ces noms au fichier m3u.

Vu que vous ne faites aucune vérification concernant les arguments ou la présence du fichier m3u, vous pourriez simplifier la totalité de votre code par :

Code : Tout sélectionner

FileWriteLine("c:\temp\Temp.m3u",$CmdLine[1])
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 867
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Path d'un fichier / menu contextuel

#17

Message par DimVar »

@Tlem

Je me demande si ce n'est pas l'ecriture/syntaxe de la valeur de la clef qui pose pb et qui ouvre de manière consécutive le script, plutôt que d'avoir plusieurs paramètres aux script. Je suis en train de voir ca sur technet.
Je vais passer en résolu et je déposerai la soluce, soit grâce a technet, soit grâce à Nirsoft.

Merci pour tout.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Path d'un fichier / menu contextuel

#18

Message par Tlem »

Techniquement parlant, ce comportement ne me semble pas aberrant et même plutôt logique.
Peu importe, en ce qui me concerne, je ferais en sorte que m3u.exe puisse traiter un ou plusieurs arguments, de telle sorte que si j'ai envie de faire du Drag&Drop, cela fonctionne aussi. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [R] Path d'un fichier / menu contextuel

#19

Message par jpascal »

Bonjour,

Le programme est en effet lancé autant de fois que le nombre de fichiers sélectionnés.

Il existe un programme qui permet de traiter tous les fichiers sélectionnés : SingleInstanceAccumulator.exe
Voici la page explicative : https://stackoverflow.com/questions/182 ... 64#1824064

Plus simplement, essayez ça :
If $CmdLineraw = '' Then Install()

RecordMp3()

Func RecordMp3()
   $fo = FileOpen("c:\temp\Temp.m3u", 1)
   FileWriteLine($fo, $CmdLineraw)
   FileClose($fo)
EndFunc   ;==>RecordMp3

Func Install()
   Local $aExt = ['mp3']
   Local $sRegPath = ''

   For $sExt In $aExt
      $sRegPath = 'HKEY_CLASSES_ROOT\' & RegRead('HKEY_CLASSES_ROOT\.' & $sext, '') & '\shell\RecordMP3'

      RegWrite($sRegPath, '', 'REG_SZ', "Ajouter à la liste m3u")
      RegWrite($sRegPath, 'Icon', 'REG_SZ', @ScriptFullPath)
      RegWrite($sRegPath & '\command', '', 'REG_SZ', '"' & @ScriptFullPath & '" %1')
   Next

   MsgBox(0, 'RecordMP3', "Menu contextuel installé")
   Exit
EndFunc   ;==>Install
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre