EXTENSION DU SHELL: MENU CONTEXTUEL EN C (WIN32 API)

draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
- 12 nov. 2008 à 15:11
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
- 31 janv. 2009 à 19:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48410-extension-du-shell-menu-contextuel-en-c-win32-api

draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

31 janv. 2009 à 19:54
Erf non, la version c++ ne marche pas non plus sur le bureau ni sur un arriere plan, il fonctionne juste sur les fichiers!
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

26 janv. 2009 à 17:57
re moi,

Pour info, j'ai testé la version c++ elle fonctionne correctement sous ce meme Vista
Sinon pour en revenir à la version C, dans xp dans la fonction CreateInstanceIClassFactory
le riid reçu est IID_IShellExtInit mais sous Vista le riid reçu est IID_IContextMenu

C'est tout ce que j'ai trouvé pour le moment, je continue à chercher et je te tiens au courant.

++
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

25 janv. 2009 à 15:43
Petite précision, sur xp je n'ai pas de prob ça tourne nikel :)
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

25 janv. 2009 à 15:05
Salut à tous,


J'ai enfin dl le code hier car je dois faire une petite extension mais eh ca ne fonctionne pas chez moi :(

Quelqu'un a-t-il testé sur un Vista SP1 ?

J'ai bien enregistré la dll en tant qu'admin mais rien ne s'affiche dans le menu :s

++
julienbj
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
27 nov. 2008 à 23:45
J'ai oublié de noter pour ta source, voila qui sera fait (10).
Encore merci pour cette mine d'informations.
julienbj
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
27 nov. 2008 à 23:44
Merci beaucoup, c'est nettement mieux comme ça pour le développement ;)
Tu as vraiment réponse à tout...
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
27 nov. 2008 à 23:04
julienbj >> C'est tout à fait normal et c'est ainsi avec toutes les extensions du shell car elles sont utilisées par l'explorateur Windows. Après un premier clic droit sur le bureau, ou sur le fond d'une fenêtre de l'explorateur, toutes les dlls des extensions du shell sont chargées par explorer.exe et ne seront déchargées, comme tu l'as remarqué, qu'après fermeture de la session courante. Pour les tests, il faut éviter d'utiliser le bureau. On peut tester sur des fenêtres de l'explorateur qui peuvent s'ouvrir chacune par un processus différent, après une petite modification dans la base de registres. Une fois, la fenêtre de test férmée, la dll sera automatiquement déchargée. Ouvre Regedit, vas dans la clé:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer
ajoute la chaine DesktopProcess de type REG_DWORD et lui assigne 1 comme valeur. La valeur 0 permet de faire l'inverse c'est à dire d'ouvrir les fenêtres de l'explorateur dans le même processus.
Pour automatiser l'opération, colle les lignes suivantes dans le Bloc-notes, enregistre avec l'extension .reg puis exécute le fichier:

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"DesktopProcess"=dword:00000001
julienbj
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
27 nov. 2008 à 22:04
Salut Racpp, je suis en train de développer une extension shell pour menu contextuel. Je me suis très fortement inspiré de tes 2 sources sur le sujet.

J'ai cependant un petit souci.
Lorsque j'enregistre la dll avec regsvr32, puis que je l'utilise, tout va bien.
Je veux ensuite la désenregister avec regsvr32 -u. La aussi, pas de problèmes. Enfin apparemment.
Si j'essaie de supprimer la dll, windows m'indique qu'elle est utilisée.
Pour le développement, je dois dire que c'est un peu pénible, fermer la session, se reconnecter, supprimer le fichier, et ce à chaque test...

J'ai testé avec ta dll, j'observe le même problème (il faut avoir visualisé le menu contextuel avec la nouvelle extension shell pour que le problème se manifeste).

Saurais-tu comment corriger cela?
Par la même occasion, y a-t-il un moyen pour déboguer une extension shell?
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

13 nov. 2008 à 00:28
Re,

Oui j'ai bien compris le principe, le probleme est que j'avais fais une extention shell en m'appuyant sur un exemple, mais quand j'ai voulu modifier le guid ca ne fonctionnait plus.
J'avais egalement utilisé le generateur de BruNews, mon erreur devait donc venir d'autre part...
Merci pour cette precision ;)

++
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
12 nov. 2008 à 20:53
Salut,
Le GUID n'est autre qu'un identificateur. Il permet d'identifier de manière unique un composant COM comme notre DLL. Je l'ai créé avec un générateur de GUID comme celui proposé parmi les sources de Brunews. Le mien est unique au monde car la DLL est destinée à être distribuée. Cela évite tout conflit possible avec un autre GUID, ayant la même valeur, déjà présent sur la base de registre. Si une DLL COM ne sera utilisée que sur un seul PC, un GUID local suffit.
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

12 nov. 2008 à 15:11
Salut,

Merci pour cette jolie implementation en C :)

Juste un ptit truc, le GUID tu vas le chercher ou ?
A quoi correspondent ces valeurs:
CLSID_ShellExtension={0x6751504C,0xAE59,0x11DD,{0xB7,0x47,0x0,0xD,0x9D,0x95,0x33,0x2B}};

++