Si desarrollamos una aplicación que manipule archivos puede ser útil disponer en el menu contextual "Enviar a" (SendTo) un enlace que permita enviar los archivos seleccionados directamente a nuestra aplicación trabajar con ellos. Esta es la típica cosita facilona y que lleva 5 minutos pero que resulta extremandamente útil cuando lo que desarrollamos es una herramienta de uso cotidiano.
Los elementos SendTo se encuentran en la carpeta %homepath/SendTo% de cada usuario, pero explicaré como añadirlo directamente con el instalador de nuestra aplicación.
Lo primero, es preparar nuestra aplicación WinForm para recibir una lista de argumentos al igual que puede hacer una aplicación de consola. Primero indicamos que constructor de nuestro formulario recibirá dicha lista y como trabajará con ellos, en este caso simplemente los añado a un ListView:
private String[] args;
public Form1(String[] args)
{
InitializeComponent();
this.args = args;
}
private void Form1_Shown(object sender, EventArgs e)
{
if (this.args != null)
{
foreach (String s in this.args)
{
listView1.Items.Add(
new ListViewItem(new String[]{Path.GetFileName(s),s}));
}
}
}
Y luego modificamos el punto de entrada de la aplicación para que se los pase:
[STAThread]
static void Main(String[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}
UPDATE 25-02-2008: Hay un error en lo que explico a continuación, lo explico en la siguiente entrada.
Para hacer que el instalador de nuestra aplicación añada un enlace en SendTo:
- Vamos al Setup Project.
- Vamos al File System Editor.
- Botón derecho sobre File System on Target Machine.
- Add Special Folder -> User's Send To Menu
Una vez dentro de esta nueva carpeta, hacemos un Create New Shortcut, y seleccionamos la salida activa de nuestro proyecto, le damos un nombre y eso será lo que aparezca en nuestro "Enviar a" (ó SendTo :P )
Probando... si selecciono una ristra de iconos de mi escritorio y los mando a mi aplicación....