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

C++ Discussion :

Association de fichiers


Sujet :

C++

  1. #1
    splash68
    Invité(e)
    Par défaut Association de fichiers
    Bonjour,

    Je recherche un moyen efficace d'intercepter ou de détecter le double-clique sur un fichier sous Windows en C++.
    Par exemple lorsque l'on double-clique sur un fichier .doc ou .docx, récupérer le chemin complet avant le lancement de Word du genre "C:\Documents and Settings\userA\Desktop\Toto.docx"

    Pour le moment, je réaliser un Hook sur la méthode "ShellExecute" en Windows XP et sur "CreateProcess" en Vista et Seven.

    Cependant, si l'application associée est installée sur le poste, avec certaines extension comme .avi par exemple, je récupère "c:\Program Files\Windows Media Player\wmplayer.exe" et non le chemin complet du fichier sur lequel j'ai double-cliqué.

    En vous remerciant d'avance pour vos idées ou explications.

  2. #2
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Hum...
    Est ce que tu ne pourrais pas faire en sorte que ton appli soit celle qui se lance par défaut?

    Donc si Word est associé aux fichiers .docx tu changerais cette association à l'installation de ton appli. En prenant soin bien sur de sauvegarder la valeur de base pour pouvoir rediriger l'appel vers Word une fois que ton appli aura finit son traitement.
    non?

  3. #3
    splash68
    Invité(e)
    Par défaut
    Merci pour ta réponse,
    Sur le principe pourquoi pas. Mais il n'est pas raisonnable d'associer toutes les extensions à mon appli sur des postes utilisateurs sur lesquelles je n'ai pas forcement les droits nécessaires.
    Mon besoin la, est de pouvoir récupérer le chemin complet du fichier sur lequel l'utilisateur à double-cliqué. Ensuite en fonction du fichier (et notamment de son extension) je vais réaliser une certaine action ou pas (ou pas c'est à dire si l'extension ne convient pas, laisser l'action "classique" s’exécuter).

  4. #4
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    En effet, je partais du principe que tu avais une liste limitée d'extensions intéressantes et pas toutes.

    Maintenant, c'est étrange que tu récupères le nom du fichier dans certains cas et le nom de l'executable dans d'autres. Je n'ai pas d'expérience avec les fonctions que tu as mentionné mais... N'est il pas possible que la "ligne" de commande associée à ces extensions n'a pas le même nombre de composantes que les autres?
    Ne peux tu pas récupérer l'intégralité de la ligne et faire le tri toi même?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par splash68 Voir le message
    je récupère "c:\Program Files\Windows Media Player\wmplayer.exe"
    Uniquement le chemin de l'application qui lance le fichier ?
    Ce chemin n'est pas suivi par le chemin du fichier ?
    Il faudrait vérifier les paramètres qui doivent contenir le chemin du fichier.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    splash68
    Invité(e)
    Par défaut
    Uniquement le chemin de l'application qui lance le fichier ?
    Ce chemin n'est pas suivi par le chemin du fichier ?
    Non, je ne récupère via le Hook sur la fonction CreateProcess que "c:\Program Files\Windows Media Player\wmplayer.exe" sans nom de fichier. Ce phénomène n'est présent que sur Seven et Vista, pas sous XP. D'après se que j'ai un peu appris, Microsoft aurai modifié la façon d'envoyer les fichiers à ouvrir pour certaines appli. Par exemple, Excel 2010, utilise un mécanisme appelé "DDE". Avec ca, le chemin du fichier n'est plus dans la ligne de commande. Cela est d’ailleurs visible en base de registre dans les clés HKEY_CLASSES_ROOT...

    c'est étrange que tu récupères le nom du fichier dans certains cas et le nom de l'executable dans d'autres.
    Ce qui m'importe est de récupérer l'extension du fichier. Effectivement récupéré toute la ligne de commande serai une solution, mais c'est tout la mon problème. A part avec un Hook je ne vois pas comment.

Discussions similaires

  1. [Wise][Registre] Association de fichier pendant installation
    Par leminipouce dans le forum Windows
    Réponses: 3
    Dernier message: 30/10/2007, 21h49
  2. pb pour associé un fichier chm avec un projet MFC
    Par Cédric_07 dans le forum MFC
    Réponses: 9
    Dernier message: 05/12/2006, 15h56
  3. Association type fichier et logiciel
    Par chris_wafer_2001 dans le forum Autres Logiciels
    Réponses: 14
    Dernier message: 21/11/2005, 21h12
  4. Réponses: 5
    Dernier message: 28/04/2004, 15h20
  5. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04

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