pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
La mia domanda è:
se ho un semplicissimo form in C# con al suo interno un TextBox / RichTextBox ed un file con un'estensione scelta da me (es *.pb) sul pc, come faccio dopo avere fatto click destro sul file > apri con... ad inserire nella casella di testo l'esatto contenuto di testo del file aperto?
Per il momento non si tratta di associare quell'estensione al programma, può essere una cosa anche temporanea, ma non riesco a capire come fare.
Spero di essere stato abbastanza chiaro.
Aspetto risposte prima possibile.
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2298
Iscritto: 04/05/2008
|
Devi andare al program.cs
e non nel form1.cs
alla voce
Codice sorgente - presumibilmente C# / VB.NET |
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main());
}
|
aggiungi come argomento al main un array di stringhe
Codice sorgente - presumibilmente C# / VB.NET |
static void Main(string[] args)
{
}
|
Dal momento che viene eseguito il doppio click (nel caso l'estensione sia associata al programma) passa
come riferimento " NomeApplicazione.exe %1"
il %1 contiene il percorso da dove e stato lanciato il file o aperto con "Apri Con..."
quindi basta recuperare il valore in main
Codice sorgente - presumibilmente C# / VB.NET |
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
//Se l'applicazione e stata avviata da un file
//args[0] contiene la directory da dove e stato lanciato il file
MessageBox.Show(args[0].ToString());
Application.Run(new Form1());
}
catch
{
//Altrimenti avvia normalmente il programma
Application.Run(new Form1());
}
}
|
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Ah ok, ho capito. Avevo visto una guida simile ma al contrario di come dici te mi faceva eseguire il costruttore Form1() in due modi. Uno con Form1(args[0]) e l'altro normale. Comunque mi sembrava la soluzione peggiore.
Ora è tutto più chiaro. Grazie mille. Domani provo ad implementare il codice e vi farò sapere.
Grazie ancora.
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Dopo aver sistemato questo aspetto (grazie del consiglio) ora stavo puntando a fare l'associazione automatica della mia estensione .pb con il mio programma Text.exe.
Ho visto un tutorial e ho riadattato il codice, solamente che (sebbene non mi dia alcun errore), non vedo cambiamenti, per esempio l'icona non viene caricata.
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 { 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); [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\\.pb", false) == null); } public static void Associate() { RegistryKey fileReg = Registry.CurrentUser.CreateSubKey("Software\\Classes\\.pb"); RegistryKey AppReg = Registry.CurrentUser.CreateSubKey("Software\\Classes\\Applications\\Text.exe"); RegistryKey AppAssoc = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.pb"); fileReg.CreateSubKey("DefaultIcon").SetValue("","C:\\Users\\utente\\Pictures\\setup.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("","C:\\Users\\utente\\Pictures\\setup.ico"); AppAssoc.CreateSubKey("UserChoice").SetValue("Progid","Applications\\Text.exe"); SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero); } } }
|
Sto cercando di trovare un errore ma per ora non ci sto riuscendo.
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Per esempio non capisco i link come "Software\\...", "Applications\\...".
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Adesso l'icona mi funziona, dato che avevo associato prima il file .pb al blocco note.
Però creando una nuova estensione e se non facendo "Apri con... ---> text.exe" non mi si apre automaticamente nel programma. Come fare?
Ultima modifica effettuata da pbe il 29/01/2015 alle 13:13 |
|
Thejuster (Admin)
Guru^2
Messaggi: 2298
Iscritto: 04/05/2008
|
Se non ricordo male alla chiave shell
E dove passi il %1 come comando va scritto open.
Comunque se devi associare dei files al tuo programma
Lo puoi fare anche tramite un installer. Risparmiando molto tempo.
Ultima modifica effettuata da Thejuster il 30/01/2015 alle 8:51
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Ok, come faccio a creare un installer e ad associarci la mia estensione?
Ultima modifica effettuata da pbe il 31/01/2015 alle 7:13 |
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
Comunque per me il problema non sta nel creare un installer o no, ma è che non riesco ad associare automaticamente la mia estensione con il mio programma.
Questo è il link del video - tutorial che ho seguito: http://www.youtube.com/watch?v=XtYobuVvcFE&feature=youtube ...
Guardatelo e provate a vedere come fare. Grazie mille
|
|