none
c# association de fichier RRS feed

  • Question

  • Salut a tous

    j'utilise cette classe pour l'association de fichier a l'executable.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    namespace WFADM3
    {
    public class AssocHelper
    {
    public static readonly AssocHelper _instance = new AssocHelper(); 
    private const Int32 SHCNE_ASSOCCHANGED = 0x8000000;
    private const Int32 SHCNF_IDLIST = 0x0000000;
    [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    private static extern void SHChangeNotify(uint wEventId, uint uFlags, string dwItem1, string dwItem2);
    private AssocHelper()
    {} 
    public static AssocHelper Instance()
    {
    return _instance;
    }
    public void CreateAssociation(string strExt, string strExeName)
    {
    RegistryKey oRegKey = Registry.ClassesRoot;
    oRegKey = oRegKey.CreateSubKey(strExt);
    oRegKey.SetValue("", strExeName);
    oRegKey.Close();
    oRegKey = Registry.ClassesRoot;
    RegistryKey oRegKeyOpenCommand = default(RegistryKey);
    oRegKeyOpenCommand = oRegKey.CreateSubKey(".dta\\shell\\open\\command");
    oRegKeyOpenCommand.SetValue("", this.GetType().Assembly.Location + "%1");
    oRegKeyOpenCommand.Close();
    RegistryKey oRegKeyDeffaultIcon = default(RegistryKey);
    oRegKeyDeffaultIcon = oRegKey.CreateSubKey(".dta\\DefaultIcon");
    string sICO = this.GetType().Assembly.Location;
    sICO = sICO.Substring(0, sICO.LastIndexOf("\\")) + "\\Edit1.ico";
    oRegKeyDeffaultIcon.SetValue("", sICO);
    oRegKeyDeffaultIcon.Close();
    oRegKey.Close();
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, null, null);
    }
    public bool IsAssociated(string extension)
    {
    return (Registry.ClassesRoot.OpenSubKey(extension, false) != null);
    }
    }
    }

     

     puis ceci dans mon savefile

    if (!AssocHelper.Instance().IsAssociated(".dta"))
    {
    AssocHelper.Instance().CreateAssociation(Application.ProductName, FileExt);
    } 

     

      mais je trouve pas comment je peut faire pour lorsque je clique sur le fichier creer par mon editeur pour lancer l'executable associer a ce fichier

    J'Ai essayer plein de truc et ca fonctionne pas

    KK'un a une idee qui fonctione 

     Merci


    BigDan
    jeudi 24 mars 2011 23:24

Réponses

  • Bonjour,

    Je préfère aller dormir que de tester en détail ;-) mais mon approche générale serait :
    - d'aller voir les valeurs écrites dans le registre (avec regedit.exe) et éventuellement d'exporter la clé concernée ou de faire une copie d'écran
    - puis d'enregistrer manuellement le fichier ce qui devrait fonctionner et d'exporter

    En comparant les deux fichiers ou les deux affichages, on devrait pouvoir trouver assez facilement les infos qui sont mal écrites dans le registre (par exemple il me semble manquer un espace entre le nom de l'exécutable et %1. Je mettrais également %1 entre guillemets ce qui je crois est obligatoire au cas où le nom du fichier comporterait des espaces.

    Eventuellement la doc est là : http://msdn.microsoft.com/en-us/library/cc144158(v=vs.85).aspx (File Association Example).

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 25 mars 2011 22:28
    Modérateur

Toutes les réponses

  • bonjour Hammadi

    merci pour ta reponse mais pas ce que je cherche on s'est peut etre mal compris

    j'essai de clarifier un peut

    si je veut ouvrir le fichier texte creer avec mon editeur en double-cliquand sur le fichier texte

    de facon a ouvrir son editeur(.exe)associer. ou et quel codes je doit placer pour que ca fonctionne

    j'ai beau reguarder ce projet et ca rien a voir avec ma demande mais ca mouvre d'autre porte que

    je peut utiliser dans d'autre projet

    MERCI.  


    BigDan
    vendredi 25 mars 2011 17:11
  • Bonjour,

    Je préfère aller dormir que de tester en détail ;-) mais mon approche générale serait :
    - d'aller voir les valeurs écrites dans le registre (avec regedit.exe) et éventuellement d'exporter la clé concernée ou de faire une copie d'écran
    - puis d'enregistrer manuellement le fichier ce qui devrait fonctionner et d'exporter

    En comparant les deux fichiers ou les deux affichages, on devrait pouvoir trouver assez facilement les infos qui sont mal écrites dans le registre (par exemple il me semble manquer un espace entre le nom de l'exécutable et %1. Je mettrais également %1 entre guillemets ce qui je crois est obligatoire au cas où le nom du fichier comporterait des espaces.

    Eventuellement la doc est là : http://msdn.microsoft.com/en-us/library/cc144158(v=vs.85).aspx (File Association Example).

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 25 mars 2011 22:28
    Modérateur
  • Merci Patrice et bonne nuit

    J'ai finallement reparer ma classe et mon Mainform et mon probleme semble resoulut

    Merci encore


    BigDan
    vendredi 25 mars 2011 23:25