none
pomoc s registry

    Dotaz

  • Zdravím zkušenější potřeboval bych poradit: v kódu níže jsem se snažil asociovat koncovku ".ada" s mým programem, ale bohužel to nefunguje. Řetězce se v registrech vytvoří, ale při poklepání na "soubor.ada" se mi nespustí s asociovanou aplikací. Nemohli by jste mi poradit kde jsem se utnul?

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    using System.IO;
    
    namespace vyslednaUrokovaSazba
    {
        static class Program
        {
            [DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
            public static extern void SHChangeNotify(uint wEwentId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
    
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                if (!jeAsociovano())
                {
                }
                else
                {
                    asociace();
                }
    
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                
                if (args.Length == 0)
                {
                    Application.Run(new Form1());
                }
                else
                {
                    Application.Run(new Form1(args[0]));
                }
            }
    
            public static bool jeAsociovano()
            {
                return (Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada", false) == null);
            }
    
            public static void asociace()
            {
                string cesta = Application.ExecutablePath;  //cesta by mela byt: program files x86\Lopi007\vus\vyslednaUrokovaSazba.exe
    
                RegistryKey regSoubor = Registry.CurrentUser.CreateSubKey("Software\\Classes\\.ada");
                RegistryKey regAplikace = Registry.CurrentUser.CreateSubKey("Software\\Classes\\Applications\\vyslednaUrokovaSazba.exe");
                RegistryKey asocApp = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada");  //asociace aplikace a koncovky
    
                regSoubor.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\dataIcon.ico"); //cesta k ikone by mela byt: program files x86\Lopi007\vus\files\dataIcon.ico
                regSoubor.CreateSubKey("PrefTyp").SetValue("","Text");//definuje typ souboru
    
                regAplikace.CreateSubKey("shell\\open\\command").SetValue("", "\"" + cesta + "\" %1"); // spusti urcenou app         
                regAplikace.CreateSubKey("shell\\edit\\command").SetValue("", "\"" + cesta + "\" %1");
                regAplikace.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\defIcon.ico"); // toto by mela byt defaultni cesta k ikone aplikace
    
                asocApp.CreateSubKey("UserChoice").SetValue("ProgId", "Applications\\vyslednaUrokovaSazba.exe");
    
                SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
            }
        }
    }
    

    13. června 2013 13:47

Odpovědi

  • Hm určitě bych si ušetřil práci, ale jak jinak se naučí dítě chodit, pokud bude jen sedět a nechá se obskakovat. Jedině tak že mu starší a zkušenější v začátcích přidrží, poradí a potom přijde na řadu i běh.

    Samozřejmě že by to bylo jednodušší, ale to není ono, když si tím člověk neprojde. A asociaci již mám vyřešenou zapomněl jsem to převést na string :-( ups :-)

     
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    using System.IO;
    
    namespace vyslednaUrokovaSazba
    {
        static class Program
        {
            [DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
            public static extern void SHChangeNotify(uint wEwentId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
    
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                if (!jeAsociovano())
                {
                }
                else
                {
                    asociace();
                }
    
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                
                if (args.Length == 0)
                {
                    Application.Run(new Form1());
                }
                else
                {
                   MessageBox.Show(cesta(args));
                   Application.Run(new Form1(cesta(args)));
                }
            }
    
            public static string cesta(string[] parametr)
            {
                string vystup = "";
                foreach (string par in parametr)
                {
                    vystup = vystup + par + " ";
                }
                return vystup.Trim();
            }
    
            public static bool jeAsociovano()
            {
                bool a = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada", false) == null;
                return (a);
            }
    
            public static void asociace()
            {
                string cesta = Application.ExecutablePath;  //cesta by mela byt: program files x86\Lopi007\vus\vyslednaUrokovaSazba.exe
    
                RegistryKey regSoubor = Registry.CurrentUser.CreateSubKey("Software\\Classes\\.ada");
                RegistryKey regAplikace = Registry.CurrentUser.CreateSubKey("Software\\Classes\\Applications\\vyslednaUrokovaSazba.exe");
                RegistryKey asocApp = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada");  //asociace aplikace a koncovky
    
                regSoubor.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\dataIcon.ico"); //cesta k ikone by mela byt: program files x86\Lopi007\vus\files\dataIcon.ico
                regSoubor.CreateSubKey("PrefTyp").SetValue("","Text");//definuje typ souboru
    
                regAplikace.CreateSubKey("shell\\open\\command").SetValue("", "\"" + cesta + "\" %1"); // spusti urcenou app         
                regAplikace.CreateSubKey("shell\\edit\\command").SetValue("", "\"" + cesta + "\" %1");
                regAplikace.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\defIcon.ico"); // toto by mela byt defaultni cesta k ikone aplikace
    
                asocApp.CreateSubKey("UserChoice").SetValue("ProgId", "Applications\\vyslednaUrokovaSazba.exe");
    
                SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
            }
        }
    }
    

    Já si neuvědomil že args vrací pole, které je rozsekané podle mezer :-(

    13. června 2013 22:35

Všechny reakce

  • Podle toho co tam vidím (nějak důkladněji jsem to neanalizoval) jsi udělal jen půl práce.

    Nedá se spojit přípona přímo s aplikací.

    Proto i command line příkazy se musí použít 2.

    http://technet.microsoft.com/en-us/library/bb490912.aspx

    http://technet.microsoft.com/en-us/library/bb490865.aspx

    .

    Nechceš raději vytvoření asociace nechat na instalačním programu?


    JCH

    13. června 2013 14:46
  • Hm určitě bych si ušetřil práci, ale jak jinak se naučí dítě chodit, pokud bude jen sedět a nechá se obskakovat. Jedině tak že mu starší a zkušenější v začátcích přidrží, poradí a potom přijde na řadu i běh.

    Samozřejmě že by to bylo jednodušší, ale to není ono, když si tím člověk neprojde. A asociaci již mám vyřešenou zapomněl jsem to převést na string :-( ups :-)

     
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    using System.IO;
    
    namespace vyslednaUrokovaSazba
    {
        static class Program
        {
            [DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    
            public static extern void SHChangeNotify(uint wEwentId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
    
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                if (!jeAsociovano())
                {
                }
                else
                {
                    asociace();
                }
    
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                
                if (args.Length == 0)
                {
                    Application.Run(new Form1());
                }
                else
                {
                   MessageBox.Show(cesta(args));
                   Application.Run(new Form1(cesta(args)));
                }
            }
    
            public static string cesta(string[] parametr)
            {
                string vystup = "";
                foreach (string par in parametr)
                {
                    vystup = vystup + par + " ";
                }
                return vystup.Trim();
            }
    
            public static bool jeAsociovano()
            {
                bool a = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada", false) == null;
                return (a);
            }
    
            public static void asociace()
            {
                string cesta = Application.ExecutablePath;  //cesta by mela byt: program files x86\Lopi007\vus\vyslednaUrokovaSazba.exe
    
                RegistryKey regSoubor = Registry.CurrentUser.CreateSubKey("Software\\Classes\\.ada");
                RegistryKey regAplikace = Registry.CurrentUser.CreateSubKey("Software\\Classes\\Applications\\vyslednaUrokovaSazba.exe");
                RegistryKey asocApp = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.ada");  //asociace aplikace a koncovky
    
                regSoubor.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\dataIcon.ico"); //cesta k ikone by mela byt: program files x86\Lopi007\vus\files\dataIcon.ico
                regSoubor.CreateSubKey("PrefTyp").SetValue("","Text");//definuje typ souboru
    
                regAplikace.CreateSubKey("shell\\open\\command").SetValue("", "\"" + cesta + "\" %1"); // spusti urcenou app         
                regAplikace.CreateSubKey("shell\\edit\\command").SetValue("", "\"" + cesta + "\" %1");
                regAplikace.CreateSubKey("DefaultIcon").SetValue("", Environment.CurrentDirectory + "\\files\\defIcon.ico"); // toto by mela byt defaultni cesta k ikone aplikace
    
                asocApp.CreateSubKey("UserChoice").SetValue("ProgId", "Applications\\vyslednaUrokovaSazba.exe");
    
                SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
            }
        }
    }
    

    Já si neuvědomil že args vrací pole, které je rozsekané podle mezer :-(

    13. června 2013 22:35