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 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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}};

++
Rejoignez-nous