begin process at 2010 03 22 14:36:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Shell

 > COMMANDE DU MENU CONTEXTUEL POUR RÉCUPÉRER LES CHEMINS D'UNE SÉLECTION DE FICHIERS DANS L'EXPLORATEUR

COMMANDE DU MENU CONTEXTUEL POUR RÉCUPÉRER LES CHEMINS D'UNE SÉLECTION DE FICHIERS DANS L'EXPLORATEUR


 Information sur la source

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Shell Classé sous :atom, parametre, command, message, contextuel Niveau :Initié Date de création :07/03/2006 Date de mise à jour :08/03/2006 02:47:34 Vu / téléchargé :10 332 / 958

Auteur : clementio

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
La raison de cette source vient d'une question sans réponse que j'ai posté dans le forum.

Je voulais pouvoir sélectionner plusieurs fichiers dans l'explorateur Windows, faire un clic droit et lancer les fichiers sélectionnés dans mon appli graçe à une commande ajoutée dans le menu contextuel.

En premier lieu pour ajouter une commande dans le menu contextuel de l'explorateur Windows, je vous ai joint un fichier reg à exécuter avant toute chose.

C'est bien beau tout ça, mais imaginer que l'appli qui va être lancée est du genre:

Private Sub Form_Load()
  
   List1.AddItem Command()
  
End Sub

Efectivement, ce code est tout à fait correct mais si on sélectionne X fichiers on se retrouve avec X fois notre application lancée, logique, non???

Cette source explique donc comment faire pour récupérer les fichiers sélectionnés en ne lançant qu'une fois l'appliction grâce à la notion d'atom (très petit connue d'ailleurs).

CHOSE TRES IMPORTANTE:
Pour tester, il faut placer le dossier "Atom" contenant "Projet1.exe" à la racine du lecteur C et ensuite exécuter le fichier reg pour avoir la commande du menu contextuel.
Pour tester, sélectionnez plusieurs fichiers, faites un clic droit et cliquez sur "Tester projet1".


Pour finir, Windows est un peu bizzare car si dans une sélection de plusieurs fichiers il y a des .exe ils ne seront pas affichés (Apparemment, Windows ne veut pas passer de programmes en paramètre à un autre programme...) mais sinon avec tout le reste ça marche bien.
Autre chose, j'aurais pu placer mon appli dans le dossier "Envoyer vers". Avec une sélection de plusieurs fichiers, on récupère bien tous les chemins des fichiers dans Command. Mais hélas, ça ne marche qu'avec une sélection de moins de 23 fichiers, bizarre non???

Ceci n'est qu'un test mais vous êtes libre d'intégrer ça dans vos applis (c'est ce que j'ai fait d'ailleurs!!!)

Allez à vos commentaires...



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 mars 2006 01:13:38 :
Changement du titre
08 mars 2006 02:47:34 :
Allégement du code

 Sources du même auteur

Source avec Zip Source avec une capture DICO ACCORDS GUITARE
Source avec Zip Source avec une capture CLM'S GUITARE : DICO ACCORDS + ACCORDAGE
Source avec Zip Source avec une capture CLM'S EMERGENCY : REFROIDISSEUR DE CPU
Source avec Zip Source avec une capture CLM'S MESSENGER : AJOUT DE FONCTIONS À WINDOWS LIVE MESSENGE...
Source avec Zip Source avec une capture CLMOOGLE : MOTEUR DE RECHERCHE INTUITIF

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) ENVOYEUR DE MAIL EN BATCH/DOS par Ant95
Source avec Zip Source avec une capture LANCEUR REALVNC par Nobru59
Source avec Zip Source .NET (Dotnet) XGBLENDERCOMPRESSOR par XelectroX
Source avec Zip Source .NET (Dotnet) CONTRÔLER L'AUTORUN DE WINDOWS XP (ET SUPÉRIEUR) ET LES NOTI... par ShareVB
Source avec Zip Source .NET (Dotnet) LECTURE ET MODIFICATION DES PROPRIÉTÉS DES FICHIERS OFFICE E... par ShareVB

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) PENSE BÊTE par djgab21
Source avec Zip Source avec une capture Source .NET (Dotnet) MESSAGERIE INSTANTANÉE EN XP ET VISTA SUR RÉSEAU LOCAL par Hauwee
Source avec Zip ENVOYER UN MESSAGE PAR DÉFAUT EXTRAIT D'UNE BASE DE DONNÉE V... par bou7mid
Source avec Zip Source avec une capture TRAITEMENT DES MESSAGES WINDOWS SOUS VB6 par rt15
Source avec Zip Source avec une capture SOUCLASSEMENT SANS MODULE STANDARD par EBArtSoft

Commentaires et avis

Commentaire de Renfield le 07/03/2006 15:41:56 administrateur CS

une alternative au développement d'une Extension Shell ^^

Commentaire de clementio le 07/03/2006 15:44:13 administrateur CS

Effectivement, d'ailleurs je ne crois pas que ce soit possible en vb, non???

Commentaire de Renfield le 07/03/2006 16:09:35 administrateur CS

si, bien sur ^^

Commentaire de laverdanny le 13/03/2006 07:37:39

Et comment l'on s'y prends pour le faire en VB ?

Commentaire de Renfield le 13/03/2006 09:47:35 administrateur CS

les extensions shell sont basées sur des interfaces. Il faut les incorporer dans VB, en utilisant, des fichiers tlb.

Commentaire de clementio le 13/03/2006 10:17:39 administrateur CS

D'ailleurs voici une source qui l'explique:

http://www.vbfrance.com/codes/MENU-CONTEXTUEL-SYSTEME_20732.aspx

mais c'est vrai que c'est pas mal compliqué à comprendre pour un débutant...

Commentaire de Renfield le 13/03/2006 10:23:45 administrateur CS

un très bon bouquin expliquant les extensions shell en VB6 :

http://www.amazon.fr/exec/obidos/ASIN/1565926706/402-2654299-7138526

Commentaire de PaTaTe le 09/04/2006 12:22:37

Moi et la base de registre ca fait 2 !

Comment supprimer les modifications mis par le fichier registre ?

Commentaire de Renfield le 09/04/2006 15:05:12 administrateur CS

Démarrer > Regedit > Ok

ensuite, tu supprime la clé


HKEY_CLASSES_ROOT\*\shell\Tester Projet1


en passant, pas top du tout, ce chemin en dur, que l'on trouve dans le fichier .reg...

Commentaire de clementio le 09/04/2006 15:06:17 administrateur CS

Tu fais un clic droit sur le fichier reg puis Mofifier. Ensuite, tu ouvres la fenêtre Exécuter dans le menu Démarrer et tu tapes regedit. Tu te rends à l'adresse indiquée dans le fichier et tu supprimes ce que ça t'a rajouté, c'est tout...

Commentaire de clementio le 09/04/2006 15:07:35 administrateur CS

Renfield --> Je sais mais cette source est juste un exemple. Elle est nullement exploitable dans l'état de toutes façons...

Commentaire de PaTaTe le 10/04/2006 14:57:19

et par le code y a pas une methode simple (autant pour ajouter que retirer la clé) ?

Commentaire de clementio le 10/04/2006 18:48:30 administrateur CS

A ma connaissance, non...

Je l'ai toujours fait à la main...

Commentaire de milo2009 le 27/07/2006 17:13:32

Pour effectué des opérations sur la base de registre il y a :

Private Sub Lire_Click()

'permet de lire une valeur dans la base de registre
Set WshShell = CreateObject("Wscript.Shell")

Text1.Text = WshShell.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\MenuShowDelay") 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur

'Remarque :HKEY_CURRENT_USER peut être remplacé par HKCU
'On peut mettre n'importe quelle branche comme ça

End Sub

Private Sub Ecrire_Click()
'Permet d'écrire dans la base de registre tout type de valeur (valeur chaîne, dword, binaire) ou de créer une nouvelle branche ....

Set WshShell = CreateObject("Wscript.Shell")

WshShell.RegWrite "HKCU\essaiVisualBasic\Nom d'un paramètre", "Valeur de celui-ci"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 1 Dword\", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 2 binaire\", 1, "REG_BINARY" 'Le 1, c'est la valeur de la valeur binaire (!)


End Sub

Private Sub Supprimer_Click()

'Permet d'effacer dans la base de registre tout type de valeur (valeur chaîne, dword, binaire)

Set WshShell = CreateObject("Wscript.Shell")

WshShell.RegDelete "HKCU\essaiVisualBasic\NOM DU PARAMETRE" ' supprime le paramètre
WshShell.RegDelete "HKCU\essaiVisualBasic\NOM D'UNE CLE\"        'Supprime une clé


End Sub

Commentaire de frqn le 07/03/2008 06:35:15 8/10

Bravo pour ce code utile et simple à adapter. J'ai une application qui fonctionne avec le SendTo pour récupérer une liste de fichiers sélectés dans l'explorer, et j'avais donc le problème de la limitation bizarre par Windows de la taille de la ligne commande. J'ai utilisé ce code pour passer par le menu contextuel au lieu du SendTo, fonctionnement OK sauf que je n'arrive pas à déclencher l'exécution automatique de mon ancienne appli. J'ai ajouté un appel dans la procédure unload de la form contenant la listbox, ca marche, mais ça oblige l'utilisateur à fermer le feuille pour continuer le travail.
Y a t'il un moyen de s'apercevoir qu'on n'a plus de messages à attendre, pour déclencher automatiquement l'exécution de la suite? J'ai essayé de m'envoyer un message au démarrage de la Sub main, en espérant qu'il allait s'empiler sur les autres, pour le décoder dans la  form et forcer le unload, ça ne marche pas, la synchronisation ne de fait pas. Merci de vos suggestions.  

Commentaire de oommeeggaa3d le 01/10/2008 13:54:13

pour ma part je rencontre un problème en intégrant ton code dans mon appli :
lorsqu'on sélectionne plusieurs fichiers dans l'explorateur et que l'on utlise ensuite le clic droit : il relance plusieurs session de l'application, donc sans détecter sa présence.

Commentaire de PaTaTe le 01/10/2008 15:01:12

C'est à toi de prévoir ce comportement. Personnellement, je n'utiliserais de toute manière pas ce code car les références dans la base de registre doivent être supprimées manuellement. Ça fait pas pro.

Commentaire de oommeeggaa3d le 01/10/2008 16:02:32

Ce comportement n'est pas gérable a priori : si la form est légèrement longue à afficher, le programme est lancé deux fois.

Pour contourner le problème j'ai séparé l'exécutable qui récupère le nom des fichiers/répertoires cliqués et qui envoie le tout à mon application, au bout d'un temps défini par un timer (en gros 500 ms).
C'est un peu tordu, mais à moins de freezer le système le temps qu'une fenêtre apparaisse, je ne vois pas comment faire.

Pour la base de registre, je n'ai pas le même souci que toi étant donné que je crée la clé durant l'installation de mon application par un fichier Setup. (inno setup).
La clé est effacée en cas de désinstallation du logiciel.

Commentaire de PaTaTe le 01/10/2008 17:48:56

et un truc du genre :

Private Sub Form_Load()
If App.PrevInstance = True Then
'programme déjà lancé
Else
'on continue
End If
End Sub

Sinon tu peux utiliser des exemples sur le site qui montre comment réutiliser une instance existante d'un programme pour lui envoyer des données au lieux de ré-ouvrir le programme.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Passer des arguments a un exe (ptobleme command) [ par doumhfr ] Bonjour a tous, j'ai créé une petite appli vraiment con en VB, avec juste une zone de saisie et un bouton ok.Cette appli lance VNC avec en parametre l Passer un parametre dans une command de DataEnvironment [ par youplaboom69 ] Bonjour a tous et a toutes....Voila j'ai encore un tit probleme (pour changer)...Bon j'ai réussi a me créer des état qui marche bien un parametre command [ par harry125 ] j'ai crée un dataenvironment. L'un des commands est une requete avec passage d'un parametre de type string. With DataEnvironment1    If .rsCommand1.St Détecter le framework [ par fauve ] Salut,       Voilà mon souci, j'ai conçu une application en visual basic avec Microsoft Visual Basic 2005 Express Edition et quand j'ai lancé l'appli command dos suprimé des fichier [ par anubis52100 ] bonjour,voila en vb je souhaite créer une exécution automatique d'une command dos permettant de suprimé un fichier sur le disque.avec la command "del" Message au démarrage [ par muGen57 ] Bonjour a tous , voila je suis nouveau et je recherche de l'aide auprès des personnes "expérimentées" en vbs.Je cherche comment faire pour que au déma combobox + command button + flexgrid [ par Ellana ] Salutvoila j'ai une petit problèmej'ai une combobox (on sélectionne l'année) , j'ai un command button (où il y a une requête sql)et je dois à partir d erreur meoire insuffisante [ par jpp81 ] Salut Je viens de finir une petite application de base de donnee acces sous vb4. le deploiement fait une 60 aine de fichiers, 10 Mo, un executable de vb et outlook express [ par benoit_beno ] bonjour a tous,Voila....j'ai fait beaucoup de recherche mais jusqu'a maintenant.....je rame....je voudrais grace ouvrir outlook express et lui définir PB outlook via VB ctrl activex [ par cvanacker ] Bonjour,     J'envoie un fichier via Outlook depuis mon application VB dont voici le code ... et lorsque je le lance, il me sort une erreur 429 - le c


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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 : 1,170 sec (4)

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