Commande du menu contextuel pour récupérer les chemins d'une sélection de fichiers dans l'explorateur

Soyez le premier à donner votre avis sur cette source.

Vue 14 430 fois - Téléchargée 1 203 fois

Description

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...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
2
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.
Messages postés
97
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
3 septembre 2010

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.
Messages postés
2107
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
19 février 2021
2
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.
Messages postés
97
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
3 septembre 2010

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.
Messages postés
1
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
7 mars 2008

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.
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.