
pbe (Normal User)
Pro
    
Messaggi: 131
Iscritto: 24/05/2014
|
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: http://www.youtube.com/watch?v=XtYobuVvcFE&feature=youtube ... .
Dopo aver adattato il codice nulla è cambiato ed il file non è associato. Ecco il codice completo del file Program.cs:
Codice sorgente - presumibilmente C# |
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 il 02/02/2015 alle 16:20 |
|

Roby94 (Member)
Guru
    
Messaggi: 1170
Iscritto: 28/12/2009
|
|
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6336
Iscritto: 03/01/2010
|
Ci puoi commentare queste linee di codice ?
Codice sorgente - presumibilmente C# / VB.NET |
if(!IsAssociated())
{
}
else
{
Associate();
}
|
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

pbe (Normal User)
Pro
    
Messaggi: 131
Iscritto: 24/05/2014
|
A me non sembra molto chiaro quel post, anche per il fatto che alla fine una soluzione non è stata trovata.
Poi non mi è chiaro il codice scritto da Totem:
Codice sorgente - presumibilmente Plain Text |
HKEY_CLASSES_ROOT\.asd HKEY_CLASSES_ROOT\.asd\(Predefinito) = ASDFile HKEY_CLASSES_ROOT\ASDFile\Shell\Open\command\(Predefinito) = "C:\editor.exe" "%1"
|
In che modo posso modificare il mio codice? La stranezza è che nel video (vi invito a vederlo) funziona perfettamente il codice mentre nel mio caso la funzione Associate() non parte nemmeno. Ditemi cosa ne pensate, al più presto
|
|

pbe (Normal User)
Pro
    
Messaggi: 131
Iscritto: 24/05/2014
|
Postato originariamente da nessuno: Ci puoi commentare queste linee di codice ?
Codice sorgente - presumibilmente C# / VB.NET |
if(!IsAssociated()) { } else { Associate(); }
|
|
Secondo me non hanno alcun senso, in quanto dovrebbe essere:
Codice sorgente - presumibilmente C# / VB.NET |
if(IsAssociated()) { } else { Associate(); }
|
Tuttavia nel video (del quale mi ero fidato) l'errore di cui si era accorto era proprio di non aver messo il ! nell'if.
Il problema comunque non credo sia lì in quanto anche se cambio il codice e faccio eseguire la funzione Associate() non ottengo lo stesso alcun risultato.
Ultima modifica effettuata da pbe il 02/02/2015 alle 19:13 |
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6336
Iscritto: 03/01/2010
|
Intanto quel codice deve essere semplicemente
Codice sorgente - presumibilmente C# / VB.NET |
if ( !IsAssociated() )
Associate();
|
Se sei d'accordo, continuiamo con il resto.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

pbe (Normal User)
Pro
    
Messaggi: 131
Iscritto: 24/05/2014
|
D'accordissimo. (alla fine è uguale).
Continuiamo pure. Se qualcuno ha idee o soluzioni mi faccia sapere subito.
Ultima modifica effettuata da pbe il 02/02/2015 alle 19:50 |
|

nessuno (Normal User)
Guru^2
    
Messaggi: 6336
Iscritto: 03/01/2010
|
Continuando, nella funziona IsAssociated deve essere
!= null
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|

pbe (Normal User)
Pro
    
Messaggi: 131
Iscritto: 24/05/2014
|
Ok, va bene. Inizio a sistemare.
Comunque secondo me il problema non è lì.
È il codice nella funzione Associate() o IsAssociated() che non funziona totalmente.
|
|