IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows 7 Discussion :

Menu contextuel pour Explorer


Sujet :

Windows 7

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut Menu contextuel pour Explorer
    Bonjour

    J'ai un programme ecrit (sous BCB6) qui se lance via le menu contextuel de file-explorer (clic droit sur un nom de fichier, qui lance mon programme selon l'extension de ce fichier cliqué)
    Ce programme se présente donc, non pas sous forme d'un exe, mais sous forme d'une dll, avec le programme d'installation (Inno) qui cré la clé suivate : "HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\MonExtension"
    et qui déclare ma dll à l'aide de REGSVR32.exe
    Sous Vista, ça fonctionne sans problème : La nouvelle ligne de menu apparait bien dans le menu contextuel d'Explorer, et mon programme se lance bien quand je clique sur cette ligne.

    Par contre, sous Seven, cette ligne de menu n'apparait pas dans le menu contextuel d'Explorer, bien que les différentes clés soient bien créées dans la base de registre.

    En cherchant sur Internet, j'ai trouvé le texte suivant dans un document Microsoft :

    Note There are special considerations for 64-bit Windows when registering handlers that work in the context of 32-bit applications: when Shell verbs are invoked in the context of a 32-bit application, the WOW64 subsystem redirects file system access to some paths. If your .exe handler is stored in one of those paths, it is not accessible in this context. Therefore, as a work around, either store your .exe in a path that does not get redirected, or store a stub version of your .exe that launches the real version.

    Bien, mais ça ne m'éclaire pas beaucoup sur ce que je dois faire exactement pour que ce qui fonctionne sous Vista accepte aussi de fonctionner sous Seven...

    Toute information à ce sujet sera la bienvenue.
    Merci.

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    Je ne sais pas si ça t'aideras...
    Perso sous Seven j'ai ajouté des ouvertures dans le menu contextuel en ajoutant des clés dans le registre :
    HKEY_CLASSES_ROOT/*/shell

    Ajout de 3 clés Firefox, Word et Audacity :

    Ajout d'une clé default, dans laquelle je mets une clé command qui pointe sur l'.exe à lancer. Pas de raison que ça ne fonctionne pas pour une dll...
    Voir image.
    Voir aussi association d'une icône ici

    A+
    [Edit 12:50] PS: pour que ce soit pris en compte il faut, relancer explorer, voire Fermer/Rouvrir la session !

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Bonjour
    Merci pour la réponse.
    D'après ce que j'ai pu voir, les clés dans "HKEY_CLASSES_ROOT\*\shell\" fonctionnent uniquement pour lancer des .exe depuis le menu contextuel d'Explorer.
    Pour les .dll, il semble qu'il faille obligatoirement utiliser les clés "HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\"
    Reste à savoir pourquoi ça fonctionne sous Vista et pas sous Seven.

    J'ai essayé de déclarer ma dll manuellement (sous Seven) avec Regsvr32.exe, et j'obtiens le message enigmatique suivant :



    Malgré ça, la dll est bien déclarée quand même, mais le menu contextuel d'Explorer n'en tiend pas compte.

    Accessoirement, une question annexe que je me pose est pourquoi, quand on visualise avec Exploer, les propriétés d'une dll, on n'a pas l'onglet "Compatibilité" dont on bénéficie quand on visualise les propriétés d'un exe, et qui permet donc de choisir une compatibilité avec les versions plus anciennes de Windows.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Bonjour

    Personne ne voit de piste pour faire avancer ce problème ?

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Attention, sur un système 64bits, l'utilitaire regsvr32, lancé directement, sans notion de chemin, rien est (comme son nom l'indique pas) la version 64 bits de l'utilitaire qui se trouve dans C:\windows\system32.
    Il peut arriver que cet utilitaire ne sache pas enregistrer correctement des dll
    32 bits. Dans ce acs il faut lancer la version 32bits de l'utilitaire, en allant la chercher manuellement dans c:\windows\syswow64\

    Citation Envoyé par alain lecomte Voir le message
    Accessoirement, une question annexe que je me pose est pourquoi, quand on visualise avec Exploer, les propriétés d'une dll, on n'a pas l'onglet "Compatibilité" dont on bénéficie quand on visualise les propriétés d'un exe, et qui permet donc de choisir une compatibilité avec les versions plus anciennes de Windows.
    Parce qu'une dll n'est pas destinée à être exécutée directement. Elle s’exécute dans le contexte de l’exécutable qui l'appelle. La compatibilité se défini donc au niveau de cet executable.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Bonjour
    Merci pour la réponse.

    Effectivement, si j'utilise 'C:\windows\system32\regsvr32.exe', j'obtiens le message enigmatique montré ci-dessus, alors que si j'utilise 'c:\windows\syswow64\regsvr32.exe', j'obtiens le message habituel indiquant que la dll a bien été prise en compte.

    Malheureusement ensuite, il n'y a toujours pas d'évolution visible dans le menu contextuel de l'explorer, aussi bien quand je lance (après reboot) 'C:\windows\explorer.exe' que quand je lance la version supposée 32 bits 'c:\windows\syswow64\explorer.exe'
    Dans ces deux versions de l'explorer, les propriétés comportent bien l'onglet "Compatibilité", mais le mode de compatibilité est grisé et ne peut être utilisé pour demander une compatibilité type Vista.

    J'ai donc bien peur que pour acceder au menu contextuel de l'explorer sous Seven, il faille obligatoirement utiliser une dll compilée avec un compilateur 64 bits : Quelqu'un peut-il confirmer ou infirmer ?

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Non, mais si c'est une dll, de toute façon tu n'as pas accès à l'onglet Compatibilité. Cet onglet n'est accessible que sur les exécutables.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Quand je parlais de mode compatibilité qui est grisé et ne peut donc être utilisé pour demander une compatibilité type Vista, je parlais des propriétés de Explorer.exe, pas des dll.

    Il doit pourtant y avoir une méthode pour s'en sortir, car je viens de d'installer sur mon PC W7 deux "vieilles" applications (Paint Shop Pro + ACDSee) qui datent de 2002, donc avant l'existence des versions 64 bits : Non seulement ces deux applis fonctionnent parfaitement sous W7, mais leur menu contextuel apparait sans probleme dans Explorer.

Discussions similaires

  1. Menu contextuel pour QTreeView
    Par snake0a dans le forum Qt
    Réponses: 1
    Dernier message: 28/12/2009, 14h10
  2. Gérer le menu contextuel d'explorer
    Par colargol7 dans le forum C#
    Réponses: 1
    Dernier message: 02/10/2009, 07h58
  3. Réponses: 3
    Dernier message: 19/03/2009, 14h59
  4. Menu contextuel pour une cellule donnée et non l'ensemble
    Par roudy78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/07/2007, 14h44
  5. faire un menu contextuel pour données issue d'1 table
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 27/02/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo