[R] ContextmenuHandlers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[R] ContextmenuHandlers

#1

Message par timmalos »

Au secours !!! :lol: (Je voulais dire ca depuis longtemps)
J'ai besoin d'aide (Ca, un peu moins)

Alors, bonjour à tous, et merci pour ceux qui vont prendre le temps d'y reflechir ;)
Mon problème est simple, je developpe un petit programme en Autoit qui permet d'envoyer des fichiers directement sur une clef-usb online distante, et ce petit programme retourne le lien dans le presse-papier.
Jusqu'ici, rien de bien dramatique. Sauf que j'aimerai qu'à chaque fois que je fasse un clic-droit, je puisse choisir d'envoyer mon fichier en ligne.
Comme sur ce screen :
Image

Jusqu'ici, tout va toujours bien, tout marche à merveille. SAUF que, mon projet à un peu evolué, et maintenant je n'ai pas besoin d'un seul texte ''Envoyer sur ma clef-usb en ligne" mais de plusieurs, par exemple "Usb-Online : Parametres", "Usb-Online , Envoyer par mail" etc etc...

Je voudrais donc faire comme VLC, WinZIP, 7zip et compagnie, faire un menu en cascade, et mettre juste 'USB ONLINE' dans le menu contextuel, qui ouvrirait vers un 2ème menu, comme ici:

Image

Sauf que forcement, ca ne marche pas pareil,et je n'arrive pas à trouver sur google, ni MSDN. Donc si quelqu'un a la solution, Merci beaucoup ;)

Pour info, actuellement je mets ceci:

Code : Tout sélectionner

If RegRead("HKCR\*\shell\UsbOnline\Command", "") <> @ScriptFullPath & " %1" And @Compiled Then
        MsgBox(48, "Attention", "Ce programme va modifier une clé-registre (clic-droit sur tous les fichiers).")
        RegWrite("HKCR\*\shell\UsbOnline", "", "REG_SZ", "Envoyer sur ma clé USB en-ligne")
        RegWrite("HKCR\*\shell\UsbOnline\Command", "", "REG_SZ", @ScriptFullPath & " %1")
    EndIf
Alors que tous les programmes dont je parle sont plutot dans le "shellex" avec des données qui ressemblent à ceci:
{7BA4C740-9E81-11CF-99D3-00AA004AE837}
Et c'est la ou je me perds, je ne sais pas du tout à quoi ca correspond... Va t'il chercher des infos ailleurs? Mystère.
J'ai lu quelque part qu'il faut utiliser des dlls, mais impossible de trouver un tutoriel ou une explication.
Et apparemment, ca serait beaucoup plus facile à faire sous Windows Seven, mais je prefererais trouver une solution pour toutes les versions.

Ah oui, dernière chose, au cours de ma "quete" j'ai cru comprendre que ca s'appelait des 'ContextmenuHandlers' d'où le nom horrible de ce post.

Merci encore,
Tim
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] ContextmenuHandlers

#2

Message par TommyDDR »

Alors, je peux te donner la réponse pour une extension de fichier en particulier.
Pour un txt par exemple :

Tu cherche la clé

Code : Tout sélectionner

"HKCR\.txt"
tu lis la valeur par défaut (chez moi : "txtfile")
Tu vas alors dans

Code : Tout sélectionner

"HKCR\txtfile\shell"
et tu ajoute :

Code : Tout sélectionner

"HKCR\txtfile\TonAction\shell\command"
et met la valeur par défaut à :

Code : Tout sélectionner

"Chemin\De\Ton\Exe" "%1"
Le texte qui apparaitra dans le clic droit est dans :

Code : Tout sélectionner

"HKCR\txtfile\TonAction"
(Valeur par défaut)
S'il n'y a rien, ca sera "TonAction".

En espérant avoir été à peu près claire ^^.

Edit : Au temps pour moi, ça m'apprendra à lire trop vite...
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] ContextmenuHandlers

#3

Message par sksbir »

@tommyddr : ce que tu dis, c'est facile à faire, et c'est déja à la portée de timmalos. Par contre, rajouter une cascade dans le clic-droit de l'explorateur, c'est une autre affaire...

Perso, j'ai pas eu non plus besoin d'aller plus loin que l'ajout d'une ligne simple dans le clic droit, mais j'ai trouvé ça pour toi :

j'ai retrouvé la trace de ta DLL ici : http://www.autoitscript.com/forum/topic ... u-handler/
Mais en fait, rien ne dit qu'il en faut une spécifique.
Le gars fait référence à un lien msdn qui est ici :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

ici, ya au moins des exemples en VBS : http://oreilly.com/catalog/vbshell/chapter/ch04.html

C'est par ce dernier lien que j'attaquerais pour comprendre, mais ça reste très compliqué, surtout le soir après une journée de boulot.. :mrgreen:
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] ContextmenuHandlers

#4

Message par timmalos »

Je pars du boulot donc je regarderai ce soir mais merci pour les liens sksbir

@TommyDDR En effet, ce que tu dis est quelque chose que j'ai déjà fait, sauf qu'à la place de TxtFile j'utilise *, ce qui permet de le faire pour tout type de fichier et non seulement un fichie texte. Mais merci quand même pour l'aide.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] ContextmenuHandlers

#5

Message par Tlem »

Perso, j'ai utilisé Fast Explorer 2008.
Il est possible de récupérer et d'utiliser la DLL FEShlExt.dll et de faire un menu aux petits oignons.

Voici le fichier .ini du menu que j'ai créé pour AutoIt :
► Afficher le texte
Voici à quoi il ressemble :
Fichiers joints
Menu.PNG
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
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] ContextmenuHandlers

#6

Message par timmalos »

Bon ben de belles heures de cauchemar qui m'attendent... On va suivre MSDN et on verra bien ce que ca va donner.
(http://msdn.microsoft.com/en-us/library ... 85%29.aspx)

Ton programme est génial Tlem, mais je vais avoir besoin de distribuer mon application, faut que je regarde si je peux juste prendre une dll, l'installer, et le tour est joué ou si c'est plus compliqué ;)
(et tout doit bien se desinstaller également)

Je passe en résolu, je vous tiendrai au courant si j'y arrive.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [R] ContextmenuHandlers

#7

Message par timmalos »

Victoire ! :P
Niquel j'ai réussi. Merci Tlem. Voilà juste quelques astuces pour les suivants.
ATTENTION, ne marche QUE si vous n'avez PAS installer "Fast Explorer" (Ou décocher auparavant la DLL dans la config)

Il suffit d'appeler les 2 fonctions suivantes (En plus de créer le fichier de configuration "FastExplorer.ini" et de le mettre dans le même dossier que la dll)

Code : Tout sélectionner

;/////////////////////////////////////////
;Author : Tim Malossane
;Load FEShlExt.dll
;/////////////////////////////////////////
Func FEShlExt_load()
    If @AutoItX64 Then ;Win 64
        Run(@ComSpec & " /c regsvr32 FEShlExt.dll /s", @ScriptDir & '\x64', @SW_HIDE)
    Else ;Win 32
        Run(@ComSpec & " /c regsvr32 FEShlExt.dll /s", @ScriptDir, @SW_HIDE)
    EndIf
EndFunc
Exit

Func FEShlExt_unload()
    If @AutoItX64 Then ;Win 64
        Run(@ComSpec & " /c regsvr32 FEShlExt.dll /u /s", @ScriptDir & '\x64', @SW_HIDE)
    Else ;Win 32
        Run(@ComSpec & " /c regsvr32 FEShlExt.dll /u /s", @ScriptDir, @SW_HIDE)
    EndIf
EndFunc
 
Fichiers joints
FFShellEx.rar
(367.38 Kio) Téléchargé 63 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] ContextmenuHandlers

#8

Message par Tlem »

Pour la DLL pas de problème, tu peut l'utiliser librement du moment que tu ne te l'approprie pas et que tu cite le créateur :
Fast Explorer comprend l'extension shell FEShlExt.dll qui permet à une application tierce d'ajouter des éléments de menu contextuel. Veuillez consulter la rubrique Module d'extension du menu contextuel de Fast Explorer pour plus amples informations.

Licence
-------

Ce logiciel est GRATUIT et fourni 'tel quel', sans aucune garantie expresse ou tacite. En aucun cas, les auteurs ne pourront être tenus pour responsables pour de quelconques dommages résultant de l'utilisation de ce logiciel.

Quiconque a l'autorisation d'utiliser ce logiciel à n'importe quelle fin, y compris commerciales, de le modifier et de le distribuer librement, moyennant les restrictions suivantes :

1. L'origine du logiciel ne doit pas être masquée, vous ne devez pas prétendre en être l'auteur original.
2. Si vous incorporez ce logiciel dans un produit, la documentation du produit doit comporté une reconnaissance.
3. Cette notice ne peut être ni modifiée, ni supprimée de la distribution.
En ce qui concerne la DLL, cela reste du classique.
Regsvr32 pour l'enregistrer ou la désenregistrer. ;)

Edit : J'avais oublié de cliquer sur Envoyer ...
Donc j'ai pris 30mn à 1h00 de retard entre la rédaction et l'envoi de ce message. :oops:
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
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [R] ContextmenuHandlers

#9

Message par timmalos »

J'avais bien lu la license avant de me lancer , par contre peut etre du classique pour toi, mais moi ca faisait bien longtemps que j'avais plus joué avec Regsvr32
Répondre