Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Associare estensione file a programma
Forum - C# / VB.NET - Associare estensione file a programma

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 16:16
Lunedì, 02/02/2015
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#

  1. using System;
  2. using System.Linq;
  3. using System.Windows.Forms;
  4. using System.Runtime.InteropServices;
  5. using System.Collections.Generic;
  6. using Microsoft.Win32;
  7.  
  8. namespace Text
  9. {
  10.         /// <summary>
  11.         /// Class with program entry point.
  12.         /// </summary>
  13.         internal sealed class Program
  14.         {
  15.                 [DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError=true)]
  16.                 public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
  17.                 /// <summary>
  18.                 /// Program entry point.
  19.                 /// </summary>
  20.                 [STAThread]
  21.                 private static void Main(string[] args)
  22.                 {
  23.                         if(!IsAssociated())
  24.                         {
  25.                                
  26.                         }
  27.                         else
  28.                         {
  29.                                 Associate();
  30.                         }
  31.                         Application.EnableVisualStyles();
  32.                         Application.SetCompatibleTextRenderingDefault(false);
  33.  
  34.                        try
  35.                        {
  36.                             Application.Run(new MainForm(args[0].ToString()));
  37.                        }
  38.                        catch
  39.                        {
  40.                             Application.Run(new MainForm());
  41.                        }
  42.                        
  43.                 }
  44.                
  45.                 public static bool IsAssociated()
  46.                 {
  47.                        return(Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.bee", false) == null);
  48.                 }
  49.                 public static void Associate()
  50.                 {
  51.                         RegistryKey fileReg = Registry.CurrentUser.CreateSubKey("Software\\Classes\\.bee");
  52.                         RegistryKey AppReg = Registry.CurrentUser.CreateSubKey("Software\\Classes\\Applications\\Text.exe");
  53.                         RegistryKey AppAssoc =                          Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.bee");
  54.                        
  55.                         fileReg.CreateSubKey("DefaultIcon").SetValue("",""+Application.StartupPath+"\\icon.ico");
  56.                         fileReg.CreateSubKey("PerceivedType").SetValue("","Text");
  57.                        
  58.                         AppReg.CreateSubKey("shell\\open\\command").SetValue("","\""+Application.ExecutablePath + "\" %1");
  59.                         AppReg.CreateSubKey("shell\\edit\\command").SetValue("","\""+Application.ExecutablePath + "\" %1");
  60.                         AppReg.CreateSubKey("DefaultIcon").SetValue("",""+Application.StartupPath+"\\icon.ico");
  61.                         AppAssoc.CreateSubKey("UserChoice").SetValue("Progid","Software\\Classes\\Applications\\Text.exe");
  62.                         SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
  63.                 }
  64.                
  65.         }
  66. }



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


Per me programmare è costruire il futuro: codice dopo codice.

http://benzocode.altervista.org (in costruzione)
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:29
Lunedì, 02/02/2015
Possibile che generi un eccezione?
Ti consiglierei di guardare i post di totem in questa discussione dove specifica quali chiavi di registro permettano l'associazione di un file ad un programma.
http://www.pierotofy.it/pages/extras/forum/16/20222-associ ...


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:03
Lunedì, 02/02/2015
Ci puoi commentare queste linee di codice ?

Codice sorgente - presumibilmente C# / VB.NET

  1. if(!IsAssociated())
  2. {
  3.                                
  4. }
  5. else
  6. {
  7.        Associate();
  8. }



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 19:05
Lunedì, 02/02/2015
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

  1. HKEY_CLASSES_ROOT\.asd
  2.  HKEY_CLASSES_ROOT\.asd\(Predefinito) = ASDFile
  3. 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 :)


Per me programmare è costruire il futuro: codice dopo codice.

http://benzocode.altervista.org (in costruzione)
PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 19:11
Lunedì, 02/02/2015
Testo quotato

Postato originariamente da nessuno:
Ci puoi commentare queste linee di codice ?

Codice sorgente - presumibilmente C# / VB.NET

  1. if(!IsAssociated())
  2. {
  3.                                
  4. }
  5. else
  6. {
  7.        Associate();
  8. }





Secondo me non hanno alcun senso, in quanto dovrebbe essere:
Codice sorgente - presumibilmente C# / VB.NET

  1. if(IsAssociated())
  2. {
  3.  
  4. }
  5. else
  6. {
  7.    Associate();
  8. }


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


Per me programmare è costruire il futuro: codice dopo codice.

http://benzocode.altervista.org (in costruzione)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:26
Lunedì, 02/02/2015
Intanto quel codice deve essere semplicemente

Codice sorgente - presumibilmente C# / VB.NET

  1. if ( !IsAssociated() )
  2.    Associate();



Se sei d'accordo, continuiamo con il resto.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 19:34
Lunedì, 02/02/2015
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


Per me programmare è costruire il futuro: codice dopo codice.

http://benzocode.altervista.org (in costruzione)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:28
Lunedì, 02/02/2015
Continuando, nella funziona IsAssociated deve essere

!= null



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 20:36
Lunedì, 02/02/2015
Ok, va bene. Inizio a sistemare.

Comunque secondo me il problema non è lì.

È il codice nella funzione Associate() o IsAssociated() che non funziona totalmente.


Per me programmare è costruire il futuro: codice dopo codice.

http://benzocode.altervista.org (in costruzione)
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo