Diskuze: Pomoc s registry

C# .NET .NET (C# a Visual Basic) Pomoc s registry American English version English version

Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:

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);
        }
    }
}
 
Odpovědět 13.6.2013 16:34
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na lopi.trucker
David Čápka:

Zkoušel jsi použít nějakou hotovou třídu? Určitě jich vygooglíš plno.

Nahoru Odpovědět 13.6.2013 16:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na David Čápka
lopi.trucker:

Nee ale už jsem to rozchodil, ale zase je tu jiný problémek. Program to už spustí, ale v konstruktoru formu mám toto:

namespace vyslednaUrokovaSazba
{
    public partial class Form1 : Form
    {
        string soubor;
        string textNapovedy;

        public Form1(string soubor)
        {
            InitializeComponent();
            StreamReader sr = new StreamReader(soubor);
            soubor = sr.ReadToEnd();
        }

a tady se mi do souboru neuloží cesta k souboru na který jsem poklepal ("c:\Program Files (x86)\Lopi007\Vus\na­zevSouboru.ada"), ale vyhodí mi to chybu: "Soubor C:\Program nebyl nalezen." a proměnná obsahuje: "C:\Program" to je vše. Dle mojích předpokladů tam měla být uložena cesta k souboru na který jsem poklepal ne?

Editováno 13.6.2013 17:09
 
Nahoru Odpovědět 13.6.2013 17:07
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na lopi.trucker
David Čápka:

Dělá to asi mezera v Program_Files, dej tu cestu do uvozovek.

Nahoru Odpovědět  +1 13.6.2013 17:16
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na lopi.trucker
Luboš Běhounek (Satik):

A posíláš si ji tam z funkce main ze souboru Program.cs?
Musíš ji mírně upravit - přidat parametr a předávat ho formu:

static void Main(String[] arg)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1(arg.Length>0?arg[0]:""));
}
Nahoru Odpovědět 13.6.2013 17:18
:)
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na David Čápka
lopi.trucker:

He? Nerozumím řeči tvého kmene ;( Jak mám dát proměnou do uvozovek? Tato proměná je inicializovaná systémem a předaná do konstruktoru, teda pokud se nepletu. Já tam nemám pevně stanovenou cestu k souboru. Ten soubor může být kdekoliv v PC. Tam by se mi měla načíst jakákoliv cesta odkudkoliv. Nebo ne? o_O

 
Nahoru Odpovědět 13.6.2013 17:24
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
lopi.trucker:

hm taky jsem nad tím právě dumal :O že to tam předávám nějak blbě :D

 
Nahoru Odpovědět 13.6.2013 17:26
Avatar
Odpovídá na lopi.trucker
Michal Žůrek (misaz):

Když na soubor poklepáš spustí se tvá aplikace a do takových "spouštěcích konzolových informací" se jí dá cesta k souboru, který byl uživatem otevřen.

http://www.itnetwork.cz/…ouboru-cast3

tam je to popsané.

Nahoru Odpovědět 13.6.2013 17:34
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na lopi.trucker
David Čápka:

Zkus použít Environment.Get­CommandLineAr­gs() jak radí Michal Žůrek (misaz).

Nahoru Odpovědět 13.6.2013 17:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:

ok díky jdu studovat. Jo a trochu mimo toto vlákno je tady někde totorial jak na tiskoé výstupy? jak si nastavit aby na stránce bylo to co chci tam kde chci? Hledal jsem to na mistu googlovi ale nic moc jsem nenašel?

 
Nahoru Odpovědět 13.6.2013 22:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.