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

Discussion :

Lancement d'une application par double clic sur le fichier associé

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Lancement d'une application par double clic sur le fichier associé
    Bonsoir,

    Je désire implémenter une fonctionnalité permettant l'ouverture d'un fichier associé à mon application par double clic. J'ai lu sur certains forums qu'il fallait d'abord gérer le lancement en ligne de commande (en gérant l'argument passé en l’occurrence le nom du fichier), chose faite avec succès. Puis de gérer la base de registre (mais rien de concret comme indication). Et c'est là où je cale : comment faire sous linux et sous windows.

    Toute aide est la bienvenue.

    Merci d'avance.

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Graphic Programmer
    Inscrit en
    Mars 2006
    Messages
    1 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Graphic Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 584
    Points : 4 070
    Points
    4 070
    Par défaut
    je suis pas sur que cela ai quelque chose a voir avec QT....

    C'est quelque chose de géré par les os ça.

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Sous Windows, je génère un installeur avec Innosetup et je lui passe les entrées suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Registry]
    Root: HKCR; Subkey: ".tif"; ValueType: string; ValueName: ""; ValueData: "AppFile"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: ".tiff"; ValueType: string; ValueName: ""; ValueData: "AppFile"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: "AppFile"; ValueType: string; ValueName: ""; ValueData: "App File"; Flags: uninsdeletekey
    Root: HKCR; Subkey: "AppFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\app.exe,0"
    Root: HKCR; Subkey: "AppFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\app.exe"" ""%1"""

  4. #4
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par cuicui78 Voir le message
    je suis pas sur que cela ai quelque chose a voir avec QT....

    C'est quelque chose de géré par les os ça.
    J'ai pu avancé un peu dans mes recherches et il est possible, sous windows, d'accéder à la base de registre et faire ce que ness522 propose. Il me reste le comment et c'est sur ça que je suis. J'ai eu d'autres pistes pour Linux et Mac mais rien de concret.

    Je reviens vers vous si j'ai du neuf.

    Merci.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il me semble que tu peux accéder à la base de registre Windows avec la classe QSettings
    Après il faut "étudier" la classe pour voir comment faire.

    En espérant que cela t'aidera. Bonne journée à toi.
    Cordialement, Gizmo.
    Dernière modification par johnlamericain ; 24/08/2011 à 15h36.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Je tiens quand même à informer de mon état d'avancement même si j'ai pas encore été débloqué ici.

    Pour Linux, il y a l'outil xdg-utils qui permet de faire ce que je cherchais et pas mal d'autres trucs. Un exemple d'utilisation en est fait ici. Par contre, vu que mon projet Qt est basé sur un CMakeList, une idée serait d'exécuter un script shell contenant les commandes xdg-utils lors de l'installation, mais je ne vois pas comment ?

    Pour Windows et Linux rien de fonctionnel jusqu'ici.

    PS : Désolé pour les modérateurs, s'ils trouvent que cela n'est pas en rapport avec Qt. Moi si ...

    Merci.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Que cherches-tu à faire ?
    Tu es par exemple sous un OS quelconque (on va dire Kubuntu Linux par exemple) : tu veux qu ton programme se lance quand on double-clique sur le fichier depuis l'explorateur de ton OS c'est ça ?

    PS : avec QSettings àa n'a pas fonctionné ? Bizarre... Il me semble pourtant que c'est avec ette classe que l'on accède au registre Windows, au fichier *.ini Linux comme indiqué dans la doc...

  8. #8
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    Bonjour,

    Que cherches-tu à faire ?
    Tu es par exemple sous un OS quelconque (on va dire Kubuntu Linux par exemple) : tu veux qu ton programme se lance quand on double-clique sur le fichier depuis l'explorateur de ton OS c'est ça ?
    Exact mais que ce soit configuré systématiquement à l'installation de mon appli sur un poste !

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est pour ouvrir 1 seul fichier bien précis ou pour ouvrir une certaines catégorie de fichier ?

    EDIT : il me semble pourtant bien que c'est dans la base de registre qu'on définit de genre de chose : si tu veux que cela se fasse directement quand ton programme est installé, il faut ajouter des clés registre dans le "script" de ton installateur (cf Inno Setup ou NSIS). Peut-être aussi qu'un redémarrage du système est nécessaire.
    Personnellement je sais comment ajouter une clé registre avec NSIS. Après il faut que ce soit au bon endroit dans le registre sinon ça ne fonctionne pas.
    Dernière modification par Invité ; 25/08/2011 à 14h49.

  10. #10
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    C'est pour ouvrir 1 seul fichier bien précis ou pour ouvrir une certaines catégorie de fichier ?

    EDIT : il me semble pourtant bien que c'est dans la base de registre qu'on définit de genre de chose : si tu veux que cela se fasse directement quand ton programme est installé, il faut ajouter des clés registre dans le "script" de ton installateur (cf Inno Setup ou NSIS). Peut-être aussi qu'un redémarrage du système est nécessaire.
    Personnellement je sais comment ajouter une clé registre avec NSIS. Après il faut que ce soit au bon endroit dans le registre sinon ça ne fonctionne pas.
    Tout d'abord merci pour l'intérêt que tu portes au sujet.

    Sinon, je vais réexpliquer :
    J'ai une application codée avec qt et qui est basée sur des CMakeList.txt. Dans cette application, il est possible d'effectuer une sauvegarde du travail effectué disons dans une archive (extension .xyz).

    Le but est que lorsque l'application est installée sur le poste d'un client, le double-clic sur l'archive ouvre automatiquement l'application pour éventuellement éditer le contenu de la sauvegarde (mais aussi n'importe quelle autre archive ayant la même extension sur le système). Cela doit être paramétré aussi bien sous Linux, Windows que sous Mac.

    Je m'en sors un peu avec Linux comme je l'ai dit avant dans mon poste sauf que je n'arrive pas à automatiser la config.

    Sous Windows, il y effectivement NSIS. Tu dis que tu l'as utilisé. J'aimerais bien que tu me donnes si possible l'essentiel pour pouvoir le faire. Je verrai si c'est possible d'intégrer au CMakeList.

    Il me restera aussi Mac ... (mais pas urgent pour le moment)

  11. #11
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Je pense que tu ne dois pas ajouter ça à la cMakeList, ni à qmake ni en rien à ton programme Qt.

    C'est de spécifique plateforme, tout comme l'installeur de ton application qui sera différent (innosetup ou NSIS sous windows, .deb sous ubuntu etc).

    C'est donc dans cet outils qu'il faut insérer les commandes de script pour paramétrer cela une seule fois lors de l'installation. Tu dois te reporter à la doc de ces outils pour savoir comment faire.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour créer des clés registre du dois faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Section -Post
      WriteUninstaller "$INSTDIR\uninst.exe"
      CreateShortCut "$SMPROGRAMS\Gordian Knot\Uninstall.lnk" $INSTDIR\uninst.exe
      WriteRegStr HKLM "SOFTWARE\GordianKnot" "InstallDir" $INSTDIR
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "DisplayName" "Gordian Knot Rip Pack ${VERSION}"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "UninstallString" "$INSTDIR\uninst.exe"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "DisplayIcon" "$INSTDIR\GordianKnot.exe"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "DisplayVersion" "${VERSION}"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "URLInfoAbout" "httpsourceforge.netprojectsgordianknot"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Gordian Knot" "Publisher" "Gordian Knot Development Team"
      Delete "$OUTDIR\Avisynth_257.exe"
      Delete "$OUTDIR\VobSub_2.23.exe"
    SectionEnd
    Explication : les instructions de la section -post sont exécutées à la fin de l'installation de ton programme : ici ça crée de nouvelles clés registre en y mettant les valeurs choisies.

    L'exemple complet se trouve ici
    Tu noteras que c'est avec la version 2.12 de NSIS (ancienne version) que j'ai fait ça. L'extension du fichier est *.nsi
    Le langage est propre au logiciel NSIS, même s'il ressemble un peu au c++ ça n'en n'est pas.

    Maintenant il te faut trouver la bonne clé registre pour qu'une extension de fichier démarre avec ton programme.
    J'espère que ça t'aidera un peu.

    Bonne journée. Cordialement, Gizmo.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Salut,

    J'avais pensé aussi à une chose que tu pouvais faire dans ton programme avec la classe QSettings : lancer l'application dès que le programme est installé (du moins prposer le choix), quand ton programme se lance inscrire les clés registre si elles n'existent pas.
    L'avantage de cette solution est, je pense, que tu n'as pas besoin de mofifier le code (ou alors très peu) entre Windows et Linux.

    Voilà sinon as-tu pu avancer un peu ton projet ?

    Cordialement, Gizmo.

  14. #14
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    ah bon il y a un registre sur linux ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    euh non mais il me semble avoir expliqué ceci un peu plus haut.
    Je le sais bien que Linux n'a pas de registre...

    C'est pas grave je ne t'en veux pas Bonne fin de journée à toi.

  16. #16
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    Salut,

    J'avais pensé aussi à une chose que tu pouvais faire dans ton programme avec la classe QSettings : lancer l'application dès que le programme est installé (du moins prposer le choix), quand ton programme se lance inscrire les clés registre si elles n'existent pas.
    L'avantage de cette solution est, je pense, que tu n'as pas besoin de mofifier le code (ou alors très peu) entre Windows et Linux.

    Voilà sinon as-tu pu avancer un peu ton projet ?

    Cordialement, Gizmo.
    Effectivement comme le dit ness522 pas de registre sous Linux. Donc ta solution resterait valable pour Windows (je vérifierai ça plus tard).

    Par contre, j'ai pu quand même avancer (pour Linux) :

    - J'ai utilisé l'outil xdg-utils pour la configuration
    - J'ai créé un script shell qui contient toutes les commandes nécessaires (commandes xgd-utils) et je vérifie que le script fais bien son travail en l'exécutant directement
    - Ensuite dans le CMakeList principal de mon projet j'indique que ce script doit s'exécuter juste après l'installation (je dis bien après l'installation et non pas la compilation) grâce à ces deux variables CPACK_RPM_POST_INSTALL_SCRIPT_FILE et CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE (pour RPM) et CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA (pour Debian) comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        ...
        SET(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/installation/linux/postinst")
        SET(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/installation/linux/prerm")
        ...
     
        SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/installation/linux/postinst;
                                               ${CMAKE_CURRENT_SOURCE_DIR}/installation/linux/prerm")
    Je n'avais pas eu le temps de poster bien avant le code car il me reste Windows et Mac. Je posterai le script shell également au besoin mais il n'a rien de spécial.

    Je reste à l'écoute s'il y a des solutions pour Windows et Mac.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Nos posts ont dû se croiser : je sais qu'il n'y a pas de registre sous Linux : cependant la QSetting devrait fonctionner aussi sous Windows, Linux et Mac, sinon ça ne serait pas Qt. Il faut après adapter le code suivant l'OS.

    Voili voilou. (Vous ne pourrez pas dire que je ne l'ai pas dit )
    Allez, allez ! Tentez votre chance ! Il va bien y en avoir un autre qui va me dire que Linux n'a pas de registre alors que je le sais déjà...

Discussions similaires

  1. [AC-2003] Affecter une valeur par double-clic sur une zone de liste
    Par schamax dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/02/2014, 12h33
  2. Réponses: 2
    Dernier message: 26/09/2008, 14h37
  3. Réponses: 2
    Dernier message: 21/08/2008, 17h34
  4. Double clic sur un fichier associé à une application
    Par kanzarih dans le forum Débuter
    Réponses: 2
    Dernier message: 13/05/2008, 17h24
  5. ouverture d'un programme par double clic sur un fichier
    Par zieg18 dans le forum Visual C++
    Réponses: 6
    Dernier message: 12/07/2006, 10h02

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