Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Clique droit > Ouvrir avec ... Mon logiciel

Anonyme
    11 janvier 2013 à 21:26:40

    Je pense que tout est dans le titre ^^

    Je répète : Je voudrais pouvoir ouvrir un fichier avec clique droit et ouvrir avec (ou programme par défaut bien sûr). 

    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      11 janvier 2013 à 21:33:52

      Salut,

      D'habitude, les sujets du forum commencent par « bonjour » ou « salut ». Je te le précise juste pour la prochaine fois. ;)

      Je suppose que ton OS est Windows. Dans ce cas, il te faut modifier la base de registres pour y ajouter la clé appropriée. Je pense qu'une recherche sur le Web t'indiquera rapidement quelle clé il faut créer, et comment modifier la BDR de Windows. N'hésite pas à demander si tu as des questions à ce sujet ! :)

      GuilOooo

      • Partager sur Facebook
      • Partager sur Twitter
      J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
      Anonyme
        11 janvier 2013 à 21:56:00

        Je suis désolé pour le bonjour .. :$ (j'étais très pressé ;) )

        Sinon  merci je vais voir ... :)

        • Partager sur Facebook
        • Partager sur Twitter
          11 janvier 2013 à 22:03:03

          Thanen Isandond a écrit:

          Je suis désolé pour le bonjour .. :$ (j'étais très pressé ;) )

          Pas de soucis, c'était juste un petit rappel, ça se voyait que tu n'étais pas impoli (tu as remercié d'avance).

          Sinon  merci je vais voir ... :)

          D'après ce site, il faudrait créer une clé dans HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\WithOpenList, je te conseille d'aller voir ta base de registre « à la main » avant de le coder en C.

          Pour accéder à la BDR Windows depuis un programme en C, il me semble qu'un tutoriel sur le SdZ expliquait comment faire. J'ignore si ce tutoriel a été migré ou pas ; je te laisse le soin de chercher.

          Bon courage ! :) GuilOooo

          • Partager sur Facebook
          • Partager sur Twitter
          J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
            11 janvier 2013 à 22:39:51

            Si ta question était comment utiliser le fichier envoyé à ton logiciel, il faut utiliser argc et argv, les paramètres de la fonction main. Il y avait un tuto sur la v3, je ne sais pas s’il est déjà sur la v4.

            EDIT: Il est ici.

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 janvier 2013 à 23:21:43

              Ah ces fameux paramètres qui ne servent à rien servent donc ^^

              Sinon, merci au deux ;)

              Je vais déjà essayé d'ouvrir un fichier, et après de l'afficher dans la liste (et oui faut faire dans le bon ordre :p ).

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                11 janvier 2013 à 23:28:09

                Il faut faire 2 choses pour réaliser ce que tu veux faire :

                • Premièrement faire comprendre à windows que tu veux ouvrir le type de fichier en question avec ton programme (pour que ça se fasse par défaut quand tu double-cliques dessus). La méthode de GuilOooo fonctionne mais le plus simple reste d'ouvrir le fichier avec ton programme en cochant la case pour que windows ouvre toujours le type de fichier en question avec ton programme.
                • Ensuite ton programme doit récupérer les informations sur le fichier : "ouvrir avec" n'a aucun sens pour un programme. Lorsque tu feras "ouvrir avec..." ton programme, windows exécuter ton programme avec des arguments, en l'occurence le nom du fichier. Pour que ton programme puisse manipuler ces arguments, il faut utiliser les paramètres de la fonction main comme dit plus faut. Dans ton cas tu n'as besoin que du premier paramètre qui est le nom du fichier, mais sache qu'il est possible d'envoyer plus de paramètres à ton programme, en exécutant ton programme depuis l'invite de commande (un peu comme dans linux).

                Pour t'expliquer rapidement, il y a deux paramètres de la fonction main : le premier est de type int (et s'apelle argc), il représente le nombre de paramètres. Normalement il n'y en a qu'un seul, mais dans ton cas il y en aura deux ; à savoir le chemin de l'exécutable et le chemin du fichier à ouvrir avec ton programme. Ces chemins sont des chaînes de caractères. Le deuxième paramètre est donc un tableau de chaînes de caractères (et s'apelle argv). Ces deux paramètres n'ont pas à être intitialisées : quand le programme est lancé, c'est ton OS qui se charge de mettre dans ces paramètres les données en question, tu n'as qu'à les utiliser. Dans ton cas, il faut récupérer la deuxième chaîne de caractère qui correspond au chemin du fichier à "ouvrir avec" ton programme, cette chaîne est argv[1].

                Attention toutefois à bien vérifier que ton programme a bien au moins deux arguments avant de tenter d'accéder à argv[1]. En effet si tu ouvres ton programme "normalement", il n'y a qu'un seul paramètre (le chemin du fichier .exe). D'où l'utilité du paramètre argc. Voici un petit exemple de code permettant de récupérer le chemin du fichier ouvert avec un programme :

                #include <stdio.h>
                #include <stdlib.h>
                
                int main(int argc,char** argv)
                {
                    /* on vérifie d'abord qu'il y a   
                    au moins deux arguments */
                    if (argc < 2)
                        return 0;
                
                    printf("Le fichier ouvert avec ce programme a pour chemin : %s",argv[1]);
                
                
                    return 0;
                }
                



                • Partager sur Facebook
                • Partager sur Twitter
                  11 janvier 2013 à 23:37:46

                  Bin-R a écrit:

                  le premier est de type int (et s'apelle argc), il représente le nombre de paramètres. Normalement il n'y en a qu'un seul, mais dans ton cas il y en aura deux ; à savoir le chemin de l'exécutable et le chemin du fichier à ouvrir avec ton programme.

                  Il peut y en avoir plus de deux s’il sélectionne plusieurs fichiers avant de faire le clic droit. Dans ce cas le premier fichier est dans argv[1], le deuxième dans argv[2], etc.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 janvier 2013 à 0:32:55

                    J'ai fais ce que vous me dites mais quand je double clique, mon programme ne se lance pas ... :(

                    J'ai bien utilisé ces variables, mais rien à faire : Ce cancre ne veut pas se lancer (sauf si je lance directement le .exe ;) )

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 janvier 2013 à 1:06:35

                      Bonsoir,

                      tu es sous quelle version de windows?

                      Est-ce que tu veux ajouter une ligne dans le menu contextuel qui s'ouvre lors d'un clic droit, ou juste associer une extension ( un .quelquechose) à ton programme?

                      Dans le deuxième cas , tu fais clique droit> ouvrir avec>parcourir, tu vas chercher ton executable et tu vérifie que la case "Toujours utiliser le programme séléctionné pour ouvrir ce type de fichier est cochée, avant de valider.

                      (Si ça ne marche pas de cette manière, il est possible de le faire en passant par le panneau de configuration, mais il me faut la version de windows pour t'indiquer comment faire)

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        12 janvier 2013 à 1:07:19

                        Donnes-nous le code source, ce sera plus simple de comprendre le problème.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          12 janvier 2013 à 13:07:42

                          Bon, j'ai réussi ! Merci à tous ;)

                          Juste, je ne sais pas afficher mon programme par défaut dans ouvrir avec (enfin ... Pour le faire automatiquement sur l'ordi utilisateur ;) ). Mais c'est par très important, non ? ^^

                          Sinon je veux juste posé une question : Comment faut-il que je fasse pour donné à mon programme les droits d'accéder en w/r au dossier C:/Programes Files ? (ou alors le nom générique de C:/Users/Current users)

                          Merci d'avance :)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 janvier 2013 à 13:38:08

                            Thanen Isandond a écrit:

                            Juste, je ne sais pas afficher mon programme par défaut dans ouvrir avec (enfin ... Pour le faire automatiquement sur l'ordi utilisateur ;) ). Mais c'est par très important, non ? ^^

                            C'est les bidouilles dont je te parlais avec la base de registres, pour ça. :)

                            • Partager sur Facebook
                            • Partager sur Twitter
                            J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                            Anonyme
                              12 janvier 2013 à 13:47:04

                              Ah ^^

                              Bon faut que je vois ça ... ;)

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                12 janvier 2013 à 14:07:22


                                Thanen Isandond a écrit:

                                Sinon je veux juste posé une question : Comment faut-il que je fasse pour donné à mon programme les droits d'accéder en w/r au dossier C:/Programes Files ? (ou alors le nom générique de C:/Users/Current users)

                                Il faut que tu exécutes ton programme en administrateur, sinon en effet windows t'interdira l'accès aux fichiers de la plupart des dossiers dont "Program Files" et ses sous-dossiers aussi bien en lecture qu'en écriture il me semble.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  12 janvier 2013 à 14:09:36

                                  Euh ... En fait je m'apperçois que je ne sais pas du tout modifier les bases de registre ... >_<

                                  Et je n'ai rien trouver de satisfaisant sur Google ... (on me parle sans arrêt du C# ou C++ ... ^^ )

                                  Quelqu'un aurrait une petite table ? :D

                                  Merci d'avance ;)

                                  Bin-R a écrit:


                                  Thanen Isandond a écrit:

                                  Sinon je veux juste posé une question : Comment faut-il que je fasse pour donné à mon programme les droits d'accéder en w/r au dossier C:/Programes Files ? (ou alors le nom générique de C:/Users/Current users)

                                  Il faut que tu exécutes ton programme en administrateur, sinon en effet windows t'interdira l'accès aux fichiers de la plupart des dossiers dont "Program Files" et ses sous-dossiers aussi bien en lecture qu'en écriture il me semble.

                                  C'est vrai mais ... Je peux pas le faire à chaque fois ... :(

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    12 janvier 2013 à 14:35:11

                                    Tu vas dans les propriétés de ton exécutable, puis dans l'onget compatibilité et tu coche en bas "exécuter en tant qu'adminstrateur", tu n'auras plus à le faire manuellement à chaque fois.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      12 janvier 2013 à 14:40:09

                                      Merci Bin-R ...

                                      Mais alors, quelqu'un sais pour les bases de registres ? (la modification)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 janvier 2013 à 14:46:24

                                        il y a un utilitaire qui s'appelle regedit pour cela

                                        par contre il est très fortement recommandé de faire une sauvegarde de l'état de ton registre avant toute modification.

                                        Une erreur de manip sur les clés du registre peut crasher completement le système...

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 janvier 2013 à 15:11:01

                                          Bonjour,

                                          Si tu veux que ton programme incrive de lui même le type de fichier dans le registre, il te faudra utiliser l'api windows pour y accéder:

                                          http://msdn.microsoft.com/en-us/library/windows/desktop/hh127451%28v=vs.85%29.aspx

                                          http://msdn.microsoft.com/en-us/library/cc144148%28VS.85%29.aspx

                                          et pour les fonctions manipulant le registre:

                                          http://msdn.microsoft.com/en-us/library/windows/desktop/ms724827%28v=vs.85%29.aspx

                                          et http://msdn.microsoft.com/en-us/library/windows/desktop/ms725488%28v=vs.85%29.aspx

                                          devraient t'aider

                                          Toutefois, si c'est pour un programme personnel, il est parfois plus simple de demander à windows de faire l'enregistrement à ta place:

                                          clic droit sur le fichier | ouvrir avec | choisir le programme par defaut, naviguer jusque ton programme, le sélectionner et cocher/dcocher la case "toujours utiliser ce programme pour ce type de fichier"

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                                          Anonyme
                                            12 janvier 2013 à 15:36:55

                                            Ca m'a l'air bien compliqué pour pas grand chose ...

                                            Je préfère le faire avec InnoSetup, mais je ne sais pas faire ! :(

                                            J'ai trouvé ce bout de code sur Google :

                                            [Registry]
                                            Root: HKCR; Subkey: ".lvl"; ValueType: string; ValueName: ""; ValueData: App"; Flags: uninsdeletevalue
                                            Root: HKCR; Subkey: "Niveau"; ValueType: string; ValueName: ""; ValueData: "Niveau  (.lvl)"; Flags: uninsdeletekey
                                            Root: HKCR; Subkey: "app\default_ico"; ValueType: string; ValueName: ""; ValueData: "{app}\ico.ico"
                                            

                                            Mais ça ne marche pas :(

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            [C] Clique droit > Ouvrir avec ... Mon logiciel

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown