IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:13.6.2013 16:34

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 Hartinger
Vlastník
Avatar
Odpovídá na lopi.trucker
David Hartinger:13.6.2013 16:59

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

Nahoru Odpovědět
13.6.2013 16:59
New kid back on the block with a R.I.P
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na David Hartinger
lopi.trucker:13.6.2013 17:07

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 Hartinger
Vlastník
Avatar
Odpovídá na lopi.trucker
David Hartinger:13.6.2013 17:16

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

Nahoru Odpovědět
13.6.2013 17:16
New kid back on the block with a R.I.P
Avatar
Odpovídá na lopi.trucker
Luboš Běhounek Satik:13.6.2013 17:18

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
https://www.facebook.com/peasantsandcastles/
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na David Hartinger
lopi.trucker:13.6.2013 17:24

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:13.6.2013 17:26

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:13.6.2013 17:34

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
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na lopi.trucker
David Hartinger:13.6.2013 17:36

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

Nahoru Odpovědět
13.6.2013 17:36
New kid back on the block with a R.I.P
Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:13.6.2013 22:11

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.