none
c# file association RRS feed

  • Question

  • Bonjour a tous

    j'utilise ceci pour l'association de l'ext. a mon exec.

    RegistryKey oRegKey = Registry.ClassesRoot;
                oRegKey = oRegKey.CreateSubKey(strExt);
                oRegKey.SetValue("", strExeName);
                oRegKey.Close();
                oRegKey = Registry.ClassesRoot;
                RegistryKey oRegKeyOpenCommand = default(RegistryKey);
                oRegKeyOpenCommand = oRegKey.CreateSubKey(strExt + "\\shell\\open\\command");
                oRegKeyOpenCommand.SetValue("", "\"" + this.GetType().Assembly.Location + "\" \"%1\"");
                oRegKey.SetValue("", "Encrypt File", RegistryValueKind.String);
                oRegKeyOpenCommand.Close();
                oRegKey.Close();

    ou j'ajoute le code pour un icon dans ce code et comment

    j'aimerais bien placer un icon de mon chois pour le fichier associé

    Merci


    Daniel

    dimanche 1 juillet 2012 19:25

Réponses

  • Bonjour Daniel,

    J'ai trouvé un exemple qui pourra t'aider.

    sinon la doc MSDN sur les icones


    fred on youTube
    PHP MySQL Web Site Creator
    fred

    • Marqué comme réponse DanielMorais lundi 2 juillet 2012 17:10
    dimanche 1 juillet 2012 19:51
  • Bonjour,

    D'après http://msdn.microsoft.com/fr-fr/library/windows/desktop/cc144152(v=vs.85).aspx il y a une entrée DefaultIcon. Sauf erreur de ma part c'est géré dans ClickOnce ou avec les installateurs (on est obligé de le faire via code ?).

    En cas d'erreur le mieux est sans doute de partir de cette erreur, car fournir un autre exemple n'apportera peut-être pas grand chose de neuf et on pourrait retomber sur la même erreur en l'adaptant selon la cause de l'erreur...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    lundi 2 juillet 2012 09:43
    Modérateur
  • Voir peut-être http://mel-green.com/2009/04/c-set-file-type-association/ ?

    Après comme je disais si cela ne marche toujours pas il faudrait voir quelle est l'erreur pour pouvoir avancer...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    lundi 2 juillet 2012 17:45
    Modérateur
  • Hélas non, c'est l'icône du programme je pense et non pas d'un type de fichier ;-) J'essaierai de voir si j'arrive à trouver un exemple qui marche ou en faire un moi-même.

    Donc pour l'instant ma compréhension est que le point manquant est de définir l'icône d'un type de fichier...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse DanielMorais lundi 2 juillet 2012 17:52
    lundi 2 juillet 2012 17:49
    Modérateur
  • La description la plus simple que j'ai trouvée est : http://msdn.microsoft.com/en-us/library/windows/desktop/hh127427(v=vs.85).aspx (mais en anglais uniquement). Cela donnerait qq chose comme le code suivant qui semble ok chez moi :

    using System;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    namespace ConsoleApplication1
    {
        class Program
        {
            const int SHCNE_ASSOCHANGED=0x08000000;
            const int SHCNF_IDLIST=0x0000;
            [DllImport("shell32")]
            static extern void SHChangeNotify(int wEventId, int UFlags, IntPtr dwItem1, IntPtr dwItem2);
            static void Main(string[] args)
            {
                const string Software = "Software";
                const string Classes = "Classes";
                const string DefaultIcon = "DefaultIcon";
                using (var software = Registry.CurrentUser.OpenSubKey(Software))
                {
                    using (var classes = software.OpenSubKey(Classes,true))
                    {
                        using (var extension=classes.CreateSubKey(".zzz"))
                        {
                            using (var defaultIcon=extension.CreateSubKey(DefaultIcon))
                            {
                                string iconFile = @"c:\Tmp\Favicon.ico";
                                defaultIcon.SetValue(null,iconFile);
                            }
                        }
                    }
                }
                SHChangeNotify(SHCNE_ASSOCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
                //Console.ReadKey();
            }
        }
    }
    Et donc si je crée un fichier .zzz je vois bien l'icône correspondante...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mardi 3 juillet 2012 08:13
    Modérateur
  • Bonjour a tous

    j'utilise ceci pour l'association de l'ext. a mon exec.

    RegistryKey oRegKey = Registry.ClassesRoot;
                oRegKey = oRegKey.CreateSubKey(strExt);
                oRegKey.SetValue("", strExeName);
                oRegKey.Close();
                oRegKey = Registry.ClassesRoot;
                RegistryKey oRegKeyOpenCommand = default(RegistryKey);
                oRegKeyOpenCommand = oRegKey.CreateSubKey(strExt + "\\shell\\open\\command");
                oRegKeyOpenCommand.SetValue("", "\"" + this.GetType().Assembly.Location + "\" \"%1\"");
                oRegKey.SetValue("", "Encrypt File", RegistryValueKind.String);
                oRegKeyOpenCommand.Close();
                oRegKey.Close();

    ou j'ajoute le code pour un icon dans ce code et comment

    j'aimerais bien placer un icon de mon chois pour le fichier associé

    Merci


    Daniel

    Finalement apres plusieurs heure je arrivé a faire fonctioner mon code

    je suis ariver a

     private void Associate(string strExt, string strExeName)
            {
                RegistryKey oRegKey = Registry.ClassesRoot;
                oRegKey = oRegKey.CreateSubKey(strExt);
                oRegKey.SetValue("", strExeName);
                oRegKey.Close();
                oRegKey = Registry.ClassesRoot;
                RegistryKey oRegKeyOpenCommand = null;
                oRegKeyOpenCommand = oRegKey.CreateSubKey(strExt + "\\shell\\open\\command");
                oRegKeyOpenCommand.SetValue("", "\"" + this.GetType().Assembly.Location + "\" \"%1\"");
                oRegKeyOpenCommand.Close();
                RegistryKey oRegKeyDeffaultIcon = null;
                oRegKeyDeffaultIcon = oRegKey.CreateSubKey(strExt + "\\DefaultIcon");
                string sICO = this.GetType().Assembly.Location;
                sICO = sICO.Substring(0, sICO.LastIndexOf("\\")) + "\\Favicon.ico";
                oRegKeyDeffaultIcon.SetValue("", sICO);
                oRegKeyDeffaultIcon.Close();
                oRegKey.Close();
            }
            public bool IsAssociated(string extension)
            {
                return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
            }

    et est utiliser de cette facon

    if (!IsAssociated(".mjx"))
                {
                    Associate(".mjx", Application.ExecutablePath);
                }

    et le fichier créer porte l'ione choisis.

    et encore Merci a fred75 et particulièrement Patrice qui a chercher  autant que moi pour ce code.

    MERCI! :) 


    Daniel

    mardi 3 juillet 2012 19:34

Toutes les réponses

  • Bonjour Daniel,

    J'ai trouvé un exemple qui pourra t'aider.

    sinon la doc MSDN sur les icones


    fred on youTube
    PHP MySQL Web Site Creator
    fred

    • Marqué comme réponse DanielMorais lundi 2 juillet 2012 17:10
    dimanche 1 juillet 2012 19:51
  • Bonjour fred75

    Merci encore mais celui-ci ne fonctionne pas pour moi (il creer une icon d'une page web)

    en vc# je recois rien sauf des erreur que je suis pas arriver a recuperer.

    Si y'a d'autre snip ou examples je suis preneur

    Merci Encore


    Daniel

    dimanche 1 juillet 2012 21:14
  • Bonjour,

    D'après http://msdn.microsoft.com/fr-fr/library/windows/desktop/cc144152(v=vs.85).aspx il y a une entrée DefaultIcon. Sauf erreur de ma part c'est géré dans ClickOnce ou avec les installateurs (on est obligé de le faire via code ?).

    En cas d'erreur le mieux est sans doute de partir de cette erreur, car fournir un autre exemple n'apportera peut-être pas grand chose de neuf et on pourrait retomber sur la même erreur en l'adaptant selon la cause de l'erreur...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    lundi 2 juillet 2012 09:43
    Modérateur
  • Merci patrice

    J'ai déja trouver la facon de faire pour executable et le fichier creer c'est juste pour l'icon mais j'ai decider de laisser tomber pour l'icon trop de trouble et dire que XP tout ou presque etait possible ca changer de facon
    radicale et le codage en a subit les foudres.

    Pour l,instant je demare l'ide en mode Administrateur et je me bas moi de cette facon avec l'ide.

    Ne Le prener pas en mal messieurs mais.

    En attendant qu'un cerveau de taille superieur au mien en invente un facon qui fonctionne je reste la.  

    Merci et ca vraiment beaucoup.


    Daniel

    lundi 2 juillet 2012 17:10
  • Voir peut-être http://mel-green.com/2009/04/c-set-file-type-association/ ?

    Après comme je disais si cela ne marche toujours pas il faudrait voir quelle est l'erreur pour pouvoir avancer...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    lundi 2 juillet 2012 17:45
    Modérateur
  • Hélas non, c'est l'icône du programme je pense et non pas d'un type de fichier ;-) J'essaierai de voir si j'arrive à trouver un exemple qui marche ou en faire un moi-même.

    Donc pour l'instant ma compréhension est que le point manquant est de définir l'icône d'un type de fichier...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    • Marqué comme réponse DanielMorais lundi 2 juillet 2012 17:52
    lundi 2 juillet 2012 17:49
    Modérateur
  • Rebonjour patrice

    J'ai déja essayer celui-ci et non lui aussi ne fonctionne pas pour moi

    je crois que mon windows me fais des sienne  je dois y voir avant tout

    merci encore.


    Daniel

    ps
    bien la je serait preneur
    lundi 2 juillet 2012 17:50
  • La description la plus simple que j'ai trouvée est : http://msdn.microsoft.com/en-us/library/windows/desktop/hh127427(v=vs.85).aspx (mais en anglais uniquement). Cela donnerait qq chose comme le code suivant qui semble ok chez moi :

    using System;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    namespace ConsoleApplication1
    {
        class Program
        {
            const int SHCNE_ASSOCHANGED=0x08000000;
            const int SHCNF_IDLIST=0x0000;
            [DllImport("shell32")]
            static extern void SHChangeNotify(int wEventId, int UFlags, IntPtr dwItem1, IntPtr dwItem2);
            static void Main(string[] args)
            {
                const string Software = "Software";
                const string Classes = "Classes";
                const string DefaultIcon = "DefaultIcon";
                using (var software = Registry.CurrentUser.OpenSubKey(Software))
                {
                    using (var classes = software.OpenSubKey(Classes,true))
                    {
                        using (var extension=classes.CreateSubKey(".zzz"))
                        {
                            using (var defaultIcon=extension.CreateSubKey(DefaultIcon))
                            {
                                string iconFile = @"c:\Tmp\Favicon.ico";
                                defaultIcon.SetValue(null,iconFile);
                            }
                        }
                    }
                }
                SHChangeNotify(SHCNE_ASSOCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
                //Console.ReadKey();
            }
        }
    }
    Et donc si je crée un fichier .zzz je vois bien l'icône correspondante...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mardi 3 juillet 2012 08:13
    Modérateur
  • Bonjour a tous

    j'utilise ceci pour l'association de l'ext. a mon exec.

    RegistryKey oRegKey = Registry.ClassesRoot;
                oRegKey = oRegKey.CreateSubKey(strExt);
                oRegKey.SetValue("", strExeName);
                oRegKey.Close();
                oRegKey = Registry.ClassesRoot;
                RegistryKey oRegKeyOpenCommand = default(RegistryKey);
                oRegKeyOpenCommand = oRegKey.CreateSubKey(strExt + "\\shell\\open\\command");
                oRegKeyOpenCommand.SetValue("", "\"" + this.GetType().Assembly.Location + "\" \"%1\"");
                oRegKey.SetValue("", "Encrypt File", RegistryValueKind.String);
                oRegKeyOpenCommand.Close();
                oRegKey.Close();

    ou j'ajoute le code pour un icon dans ce code et comment

    j'aimerais bien placer un icon de mon chois pour le fichier associé

    Merci


    Daniel

    Finalement apres plusieurs heure je arrivé a faire fonctioner mon code

    je suis ariver a

     private void Associate(string strExt, string strExeName)
            {
                RegistryKey oRegKey = Registry.ClassesRoot;
                oRegKey = oRegKey.CreateSubKey(strExt);
                oRegKey.SetValue("", strExeName);
                oRegKey.Close();
                oRegKey = Registry.ClassesRoot;
                RegistryKey oRegKeyOpenCommand = null;
                oRegKeyOpenCommand = oRegKey.CreateSubKey(strExt + "\\shell\\open\\command");
                oRegKeyOpenCommand.SetValue("", "\"" + this.GetType().Assembly.Location + "\" \"%1\"");
                oRegKeyOpenCommand.Close();
                RegistryKey oRegKeyDeffaultIcon = null;
                oRegKeyDeffaultIcon = oRegKey.CreateSubKey(strExt + "\\DefaultIcon");
                string sICO = this.GetType().Assembly.Location;
                sICO = sICO.Substring(0, sICO.LastIndexOf("\\")) + "\\Favicon.ico";
                oRegKeyDeffaultIcon.SetValue("", sICO);
                oRegKeyDeffaultIcon.Close();
                oRegKey.Close();
            }
            public bool IsAssociated(string extension)
            {
                return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
            }

    et est utiliser de cette facon

    if (!IsAssociated(".mjx"))
                {
                    Associate(".mjx", Application.ExecutablePath);
                }

    et le fichier créer porte l'ione choisis.

    et encore Merci a fred75 et particulièrement Patrice qui a chercher  autant que moi pour ce code.

    MERCI! :) 


    Daniel

    mardi 3 juillet 2012 19:34