IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Action groupée pour une sélection de fichiers


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut Action groupée pour une sélection de fichiers
    J'ai voulu créer un ptit programme permettant d'enlever un mot, dans le nom d'une liste de fichiers sélectionnés.

    Exemple:
    si dans un répertoire j'ai une liste de fichier comprenant le mot "vers.", je souhaite pouvoir le retirer en sélectionnant ces fichiers puis en faisant un clic droit et en choisissant une commande personnalisée, par exemple
    "enlever des mots"

    J'ai créé une clé dans la BDR Windows [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell
    puis une autre
    [HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\TraiteNomsFichiers
    de valeur
    "Enlever des mots"
    et enfin au sein de cette clé une autre clé "command" de valeur: "C:\WINDOWS\traite.exe --1--%1"

    j'ai réalisé un programme traite.exe compilé dans "C:\WINDOWS" récupérant les arguments de la ligne de commande.
    Le permier argument: --1 détermine l'action à réaliser (ici enlever un mots dans une liste de fichiers, le programme est destiné à permettre d'autres opérations)
    Le deuxième argument envoie l'adresse du fichier sélectionné ce qui permet d'agir sur son nom dans le programme (je modifie le fichier avec Scripting.FileSystemObject).

    Le problème est que l'appli développée ainsi exécute la procédure pour chaque fichier. Ainsi si 10 fichiers sont sélectionnés, le programme va me demander 10 fois quel est le mot à enlever.

    C'est une erreur conceptuelle que j'ai commise. De plus une action dans le clic droit semble s'exécuter individuellement pour chaque fichier sélectionné.
    Est il possible de modifier ce comportement? peut être en ajoutant une nouvelle clé dans HKCR ordonnant d'exécuter une seule fois l'action pour l'ensemble des fichiers?
    Et comment récupérer dans un tableau l'ensemble des adresses des fichiers sélectionnés? %1 ne donne que l'adresse d'un fichier?

    Sinon comment procèderiez vous?

    Je sais qu'il existe des programmes pour le faire, mais leur principe en vb serait une userform avec un contrôle explorer, ce que je voudrais éviter.

    Merci d'éclairer ma lanterne.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Recherche sur le forum .. je pense que la solution si trouve... (je sais plus ou ..)

    pour le principe il faut que ton programme gère une liste de fichier à traiter, et lors de son lancement il contrôle si une autre instance du programme n'est pas déjà en route et si oui il envoi un message à l'instance existante pour ajouter le fichier sélectionner a la liste de fichier a traiter et se ferme laissant a la première instance du programme le soin d'effectuer le traitement.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    Si j'ai compris je dois utiliser l'api windows pour comparer les hkwnd des différents processus nommés "TraiteFichiers.exe" , ou les compter,
    ainsi si il existe plusieurs processus celui-ci se ferme en transmettant ses paramètres, sinon il renomme en fonction des paramètres dont il dispose?

    Est ce que ça ne va pas causer des problèmes lors des ralentissements de la machine? On ne sait pas a priori dans quel ordre les instructions des différents programmes lancés presque en même temps seront classés dans le registre et donc dans quel ordre le processeur va les exécuter.

    De plus pour transmettre les paramètres, il n'est pas possible de modifier les commutateurs passés au processus déjà lancés, ainsi il faudrait utiliser une variable d'environnements pour stocker la liste des fichiers à renommer. C'est bien ça?

    PS: je viens de voir que vous dites que la solution est sur le forum, je vais fouiller, merci

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    j'ai trouvé ici un fil où l'auteur se pose la même question que moi

    http://www.developpez.net/forums/d84...-selectionnes/


    il utilise une propriété previnstance de l'objet App (connaissait pas). Cependant le fil se termne sans solution. De plus si j'ai compris son appli est ouverte en permanence, si bien qu'il ne rencontrera pas de problème de chronologie. Il passe tout à la première instance qui n'a pas besoin d'être fermée à la fin (contrairement à l'appli que je veux faire, à la fin il ne doit rester qu'une insance qui exécute l'action groupée puis se ferme, avec le risque qu'elle se ferme avant le déclenchment d'une nouvelle instance).


    Je continue mes recherches.

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    OK pour prevInstance, mais regarde la :

    Comment n'autoriser qu'une seule instance de mon application ?

    la première méthode te permet en plus de récupérer le handle de la première instance et donc tu dois pouvoir l'utiliser pour envoyer un message à cette première instance..

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    merci Bbil pour le lien.
    Pour l'instant j'ai opté pour une autre méthode.
    Une seule instance se lance et se maintient: la première. les autres se ferment.
    La seule instance active récupére les fichiers sélectionnés de la fenêtre active. La fenêtre active est obtenue par son handle donné par l'api:
    GetForegroundWindow()
    Ensuite dans le code j'utilise Shell.application qui a une méthode windows renvoyant toutes les fenêtres d'explorateur (internet et explorer). Cette collection est constituée d'objets qui ont pour propriété le handle de leur fenêtre respective. Ainsi en le comparant au résultat donné par GetForegroundWindow on retouve la fenêtre d'où l'utilisateur a fait un clic droit dans un objet structuré avec une méthode selecteditems.
    Le reste suit.

    je mets au propre un exemple et je le post.

    Merci de ton aide.

Discussions similaires

  1. action play/pause pour une copie de fichiers via socket
    Par dumoulex dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/05/2011, 14h05
  2. Action groupée sur une sélection de fichier
    Par SfJ5Rpw8 dans le forum Vos téléchargements VB6
    Réponses: 0
    Dernier message: 03/12/2010, 21h22
  3. Réponses: 4
    Dernier message: 05/05/2007, 12h28
  4. Réponses: 3
    Dernier message: 02/05/2007, 08h20
  5. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo