el Guille, la Web del Visual Basic, C#, .NET y más...

Ejecutar un acceso directo desde Visual Basic o C# con la clase Process

 
Publicado el 15/Ago/2007
Actualizado el 15/Ago/2007
Autor: Guillermo 'guille' Som

Ejemplo de cómo ejecutar un acceso directo (.lnk) desde Visual Basic 2005 o Visual C# 2005 usando la clase Process. (En realidad sirve para abrir cualquier tipo de documento o ejecutable.) También te explico cómo usar Drag and Drop (arrastrar y soltar) en las aplicaciones de Visual Basic y C# 2005 (en realidad vale para cualquier versión de .NET).



 

Introducción:

Este ejemplo que te muestro en esta "artículo" es la versión para .NET del que acabo de publicar hace un rato para Visual Basic 6: Ejecutar un acceso directo desde VB6 con ShellExecute.

Pero en este caso no se usa la función del API ShellExecute, ya que en punto NET tenemos la clase Process que nos sirve para lo mismo.

Además, en este código que te muestro tampoco incluyo cómo adaptar los controles al nuevo tamaño del formulario (al redimensionarlos), ya que usando la propiedad Anchor de los controles se puede hacer muy fácilmente.

Y en el caso de aceptar ficheros con Drag & Drop, pues... ya sabes que la forma de hacerlo en .NET es totalmente distinta a como se hacía en Visual Basic 6.0.
En este caso, debes asignar un valor verdadero a la propiedad AllowDrop del formulario y de la caja de textos.

Ah, y en el caso de que cierres esta aplicación y el programa que has iniciado con ella sigue funcionando, no "bloqueará" el ejecutable y podrás moverlo, eliminarlo o lo que quieras.

Esto te lo digo por si has leído el artículo de Visual Basic 6.0 y se te quede en la "mente" la advertencia que hice allí.

Lo que no varía es que los accesos directos son ficheros que tienen la extensión .lnk.

 

El ejemplo para ejecutar accesos directos y más...

Ya puestos a probar, me he dicho, vamos a hacer las cosas "bien", o al menos como a mi me gustaría que fuera esa "utilidad" o ejemplo para ejecutar cualquier acceso directo.

Y lo que he hecho es agregarle funcionalidad al formulario para que haga lo siguiente:

  1. Acepte ficheros con Drag & Drop
  2. Adapte los controles al cambiar el tamaño del formulario
  3. Y, por supuesto, que ejecute lo que indiquemos

El aspecto del formulario en ejecución es como el mostrado en la figura 1:

Figura 1. La aplicación en funcionamiento
Figura 1. La aplicación en funcionamiento

Y como puedes adivinar solo tiene dos controles: un botón (btnEjecutar) y una caja de textos (Text1).
Te lo digo más que nada por si quieres crear el ejemplo por ti mismo, ya que aquí abajo solo te muestro el código, pero no hay ningún ZIP con el proyecto completo.

Para que la caja de textos se adapte al ancho del formulario, debes asignar la propiedad Anchor para que "se ancle" a la izquierda, arriba y a la derecha.
Para que el botón se mantenga a la derecha, debes asignar a la propiedad Anchor los valores para que se "fije" arriba y a la derecha... si no sabes cómo hacer esto, échale un vistazo a la entrega 3 del curso de VB .NET en la que, entre otras cosas, explico cómo "anclar" los controles usando la propiedad Anchor.

 

Un detalle, aunque no es "crucial" para lo que vamos a ver, pero al menos te servirá de información:
Los accesos directos en realidad son ficheros con la extensión .lnk que contiene información del programa que queremos ejecutar, y la clase Process maneja perfectamente.

 

Nota:
Aclarar, que este código vale para cualquier versión de Visual Basic o de C#, (para .NET), y el que esté en la sección "VS2005" es simplemente porque el código de ejemplo lo he hecho con esa versión.

 

El código

Y una vez hechas estas aclaraciones, veamos el código para que esto funcione.

Lo primero que debes asegurarte es de tener las importación al espacio de nombres System.Diagnostics que es donde está declarada la clase Process. En Visual Basic esa importación estará "pre asignada", pero en C# debes hacerlo de forma explícita ya que no se añade automáticamente esa  importación:

using System.Diagnostics;

 

Ahora veamos el código del botón que ejecutará lo que haya en la caja de textos Text1.
A ver si adivinas cual es el código para Visual Basic y cuál es para C#, je, je.

Private Sub btnEjecutar_Click(ByVal sender As Object, ByVal e As EventArgs) _
            Handles btnEjecutar.Click
    ' Ejecutar un acceso directo
    Process.Start(Text1.Text, "")
End Sub
private void btnEjecutar_Click(object eventSender, EventArgs eventArgs)
{
    // Ejecutar un acceso directo
    Process.Start(Text1.Text, "");
}

A continuación veamos el código que permite aceptar ficheros con Drag & Drop, para que esto funcione, la propiedad AllowDrop del formulario y del textBox debe tener el valor True.

Como sabrás, para aceptar ficheros con Drag & Drop, en el evento DragEnter debes asignar un valor a la propiedad Effect con idea de que el icono del ratón cambie y de paso acepte lo que se suelte.
Después en el evento DragDrop es dónde realmente se hace lo que tengamos que hacer.
Nuevamente te "pongo como tarea" que adivines cual es el código de VB y el de C#.

private void Form1_DragDrop(object sender, DragEventArgs e)
{
    if(e.Data.GetDataPresent("FileDrop"))
    {
        Text1.Text = ((String[])e.Data.GetData("FileDrop", true))[0];
    }
}

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    // Drag & Drop, comprobar con DataFormats
    if(e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Copy;
    }
}
Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
            Handles Me.DragDrop, Text1.DragDrop
    If e.Data.GetDataPresent("FileDrop") Then
        Text1.Text = CType(e.Data.GetData("FileDrop", True), String())(0)
    End If
End Sub

Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) _
            Handles Me.DragEnter, Text1.DragEnter
    ' Drag & Drop, comprobar con DataFormats
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.Copy
    End If
End Sub

 

Y esto es todo... espero que te sea de utilidad.

Nos vemos.
Guillermo


Espacios de nombres usados en el código de este artículo:

System.Windows.Forms
System.Diagnostics
 



 


La fecha/hora en el servidor es: 23/12/2024 18:19:36

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024