draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 25 janv. 2009 à 15:43
Petite précision, sur xp je n'ai pas de prob ça tourne nikel :)
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 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és452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 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és1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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:
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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}};
31 janv. 2009 à 19:54
26 janv. 2009 à 17:57
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.
++
25 janv. 2009 à 15:43
25 janv. 2009 à 15:05
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
++
27 nov. 2008 à 23:45
Encore merci pour cette mine d'informations.
27 nov. 2008 à 23:44
Tu as vraiment réponse à tout...
27 nov. 2008 à 23:04
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
27 nov. 2008 à 22:04
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?
13 nov. 2008 à 00:28
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 ;)
++
12 nov. 2008 à 20:53
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.
12 nov. 2008 à 15:11
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}};
++