02/02/15 15:16
pbe
Ciao a tutti, non vorrei sembrare insistente ma sono ancora bloccato nello stesso problema che avevo postato, forse non molto chiaramente, giorni fa.
Rifaccio bene il post dando tutte le informazioni possibili, cercando di essere più chiaro possibile.
La situazione è questa:
Ho creato un programma che apre e modifica file di testo.
Ho cercato poi di associare l'estensione creata da me (.bee) con il mio programma come era spiegato in questo video: youtube.com/… .
Dopo aver adattato il codice nulla è cambiato ed il file non è associato. Ecco il codice completo del file Program.cs:
Tuttavia non riuscivo a trovare il problema...
Dopo un po' ho provato a mettere un semplice MessageBox nella funzione Associate() e all'avvio non appariva, perchè?
Ovviamente era perchè la funzione Associate() non veniva richiamata all'apertura.
Ho provato a sistemare un po' i codici ma niente... Anche se tolgo dal if-else iniziale la funzione e dichiaro subito all'inizio Associate() l'unico cambiamento è che mi associa l'icona al programma, ma nient'altro.
Sono ad un punto fermo, aspetto vostri consigli.
Grazie.
Rifaccio bene il post dando tutte le informazioni possibili, cercando di essere più chiaro possibile.
La situazione è questa:
Ho creato un programma che apre e modifica file di testo.
Ho cercato poi di associare l'estensione creata da me (.bee) con il mio programma come era spiegato in questo video: youtube.com/… .
Dopo aver adattato il codice nulla è cambiato ed il file non è associato. Ecco il codice completo del file Program.cs:
using System; using System.Linq; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Collections.Generic; using Microsoft.Win32; namespace Text { /// <summary> /// Class with program entry point. /// </summary> internal sealed class Program { [DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError=true)] public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2); /// <summary> /// Program entry point. /// </summary> [STAThread] private static void Main(string[] args) { if(!IsAssociated()) { } else { Associate(); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new MainForm(args[0].ToString())); } catch { Application.Run(new MainForm()); } } public static bool IsAssociated() { return(Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bee", false) == null); } public static void Associate() { RegistryKey fileReg = Registry.CurrentUser.CreateSubKey("Software\Classes\.bee"); RegistryKey AppReg = Registry.CurrentUser.CreateSubKey("Software\Classes\Applications\Text.exe"); RegistryKey AppAssoc = Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bee"); fileReg.CreateSubKey("DefaultIcon").SetValue("",""+Application.StartupPath+"\icon.ico"); fileReg.CreateSubKey("PerceivedType").SetValue("","Text"); AppReg.CreateSubKey("shell\open\command").SetValue("","\""+Application.ExecutablePath + "\" %1"); AppReg.CreateSubKey("shell\edit\command").SetValue("","\""+Application.ExecutablePath + "\" %1"); AppReg.CreateSubKey("DefaultIcon").SetValue("",""+Application.StartupPath+"\icon.ico"); AppAssoc.CreateSubKey("UserChoice").SetValue("Progid","Software\Classes\Applications\Text.exe"); SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero); } } }
Tuttavia non riuscivo a trovare il problema...
Dopo un po' ho provato a mettere un semplice MessageBox nella funzione Associate() e all'avvio non appariva, perchè?
Ovviamente era perchè la funzione Associate() non veniva richiamata all'apertura.
Ho provato a sistemare un po' i codici ma niente... Anche se tolgo dal if-else iniziale la funzione e dichiaro subito all'inizio Associate() l'unico cambiamento è che mi associa l'icona al programma, ma nient'altro.
Sono ad un punto fermo, aspetto vostri consigli.
Grazie.
Ultima modifica effettuata da pbe 02/02/15 15:20
aaa