Oppure

Loading
27/01/15 14:31
pbe
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.
aaa
27/01/15 16:59
Thejuster
Devi andare al program.cs
e non nel form1.cs

alla voce



[STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Main());
        }




aggiungi come argomento al main un array di stringhe


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


[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());
            }
}


mire.forumfree.it/ - Mire Engine
C# UI Designer
27/01/15 22:20
pbe
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.
aaa
29/01/15 11:07
pbe
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:
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.
aaa
29/01/15 11:10
pbe
Per esempio non capisco i link come "Software\...", "Applications\...".
aaa
29/01/15 11:42
pbe
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 29/01/15 12:13
aaa
30/01/15 7:36
Thejuster
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 30/01/15 7:51
mire.forumfree.it/ - Mire Engine
C# UI Designer
31/01/15 6:10
pbe
Ok, come faccio a creare un installer e ad associarci la mia estensione?
Ultima modifica effettuata da pbe 31/01/15 6:13
aaa