begin process at 2012 02 08 22:36:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

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

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


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :Shell, Extension, Langage C, Menu Contextuel, IContextMenu Niveau :Débutant Date de création :09/11/2008 Vu / téléchargé :4 215 / 288

Auteur : racpp

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Suite à mon pécédent code source:
http://www.cppfrance.com/codes/EXTENSION-S HELL-MENU-CONTEXTUEL-WIN32-API_48345.aspx
et à la demande de certains membres, voici le code source entièrement en C d'une extension du Shell pour le menu contextuel du bureau ou de l'arrière-plan d'une fenêtre de l'explorateur. Il s'agit donc d'une Dll Objet COM comme recommandé par Microsoft. Pour revoir la définition d'une extension du Shell, se reporter à la présentation du code source du lien mentionné plus haut.
Pour tester cette extension, renommer le fichier RacppMenu.dl_ en RacppMenu.dll et le coller dans le dossier System32. Ouvrir ensuite l'Invite de commandes et taper:
regsvr32 racppmenu.dll
Sous Vista il faut ouvrir l'Invite de commandes en tant qu'administrateur.
Pour déenregistrer l'extension, taper regsvr32 -u racppmenu.dll
Cette extension ajoute deux éléments au menu contextuel. "Afficher le chemin" pour voir le chemin complet du dossier courant et "Emettre un bip" pour entendre un petit bip sonore. Ces deux éléments ne sont ajoutés que si on fait un clic droit sur le bureau ou sur l'arrière-plan d'une fenêtre de l'explorateur.
C'est un projet DLL réalisé avec Visual C 2005. Son adaptation pour d'autres outils ne devrait pas poser de problème.
A noter que pour comprendre ce code source il faut avoir les notions de base sur les interfaces COM.
Les commentaires, remarques ou questions sont les bienvenus.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   RacppMenu
    •   Release
      • RacppMenu.dl_Télécharger ce fichier [Réservé aux membres club]53 248 octets
    • RacppMenu.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier13 967 octets
    • RacppMenu.defTélécharger ce fichier [Réservé aux membres club]159 octets
    • RacppMenu.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier882 octets
    • RacppMenu.vcprojTélécharger ce fichier [Réservé aux membres club]4 240 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture SOUS-CLASSEMENT DE FENÊTRE D'UN AUTRE PROCESS PAR INJECTION ...
Source avec Zip Source avec une capture FENÊTRE FLOTTANTE SANS FOCUS (WIN32 API)
Source avec Zip Source avec une capture SERVICE WINDOWS DANS UNE DLL LANCÉ PAR SVCHOST.EXE
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI...

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEU PUISSANCE 4 EN C AVEC GTK par msaidara
Source avec Zip GENERIC INPUTBOX FOR WINDOWS (WIN32 AND C) par FrancoisGauthier
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi
Source avec Zip WINDOWCAPTURE par FrancoisGauthier
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp

Commentaires et avis

Commentaire de draluorg le 12/11/2008 15:11:58

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}};

++

Commentaire de racpp le 12/11/2008 20:53:13 administrateur CS

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.

Commentaire de draluorg le 13/11/2008 00:28:34

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 ;)

++

Commentaire de julienbj le 27/11/2008 22:04:34

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?

Commentaire de racpp le 27/11/2008 23:04:55 administrateur CS

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

Commentaire de julienbj le 27/11/2008 23:44:26

Merci beaucoup, c'est nettement mieux comme ça pour le développement ;)
Tu as vraiment réponse à tout...

Commentaire de julienbj le 27/11/2008 23:45:32 10/10

J'ai oublié de noter pour ta source, voila qui sera fait (10).
Encore merci pour cette mine d'informations.

Commentaire de draluorg le 25/01/2009 15:05:38

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

++

Commentaire de draluorg le 25/01/2009 15:43:41

Petite précision, sur xp je n'ai pas de prob ça tourne nikel :)

Commentaire de draluorg le 26/01/2009 17:57:33

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.

++

Commentaire de draluorg le 31/01/2009 19:54:58

Erf non, la version c++ ne marche pas non plus sur le bureau ni sur un arriere plan, il fonctionne juste sur les fichiers!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

exports Shell Extension [ par guimou ] Hello tout le monde, j'ai un problème avec une Shell Extension. Les fonctions sont déclarées avec __stdcall et j'ai mis un .def avec le nom de la lib comment savoir si un prog a un Shell_NotifyIcon??? [ par youpiyoyo ] Comme le titre le demande, j'aimerai savoir comment savoir si un prog selectionner (un peu comme spy++), a une icone dans la zone de notifycation????j Shell extention sur repertoire [ par mastercatz ] BonjourJe cherche à ajouter une commande dans le context menu sur un repertoire. J'ai besoin de passer le chemin du repertoire à une application qui s Shell extensions Win32 [ par TheShade ] Salut à tous !J'ai pris la source située à cette adresse :http://www.cppfrance.com/code.aspx?id=23854l'installation fonctionne parfaitement, je lance shell minimal [ par ledebutantenC ] Bonjour, je suis debutant en C , j'ai un projet à rendre et je ne sais pas par ou commencer...merci de m'aidervoila le lienhttp://www.cmi.univ-mrs.fr/ Programmation Systeme : Shell Linux [ par salvio3223 ] Re bonjour.J'ai une autre ( petite ? ) question à poser.Là encore je pense que cela est possible enfin ...Je voudrai exécuter un programme dans un scr Création d'un shell Unix [ par Lamb ] Bonjour à tous ! J'entreprend de créer mon propre Shell Unix en C/C++ : il s'agirait d'un shell très simple (dans un premier temps en shell list + checkbox c++builder [ par yuka_605 ] salut à tous j'utilise un tptShell list sous c++ builder 6.J'ai coché  la propriété checkbox, pour avoir une case à coch File Extension [ par vez_from_hell ] Bonjourpour commencer je développe un programme de texte (un peu comme bloc notes) mais je ne sais pas comment, lorsque j'enregistre un fichier, sprintf récalcitrant [ par myrion ] Bonjour, Je suis assez une pine en C alors évitons les railleries! Merci Voici ma question... Lorsque je fais: char* extension extension = "tx


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,635 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales