Ir a la sección de Como en .NET Cómo en .NET
 

Restaurar una instancia previa con Visual Basic 2005

 

Publicado el 20/Ene/2007
Actualizado el 20/Ene/2007
Autor: Guillermo 'guille' Som

En este artículo te explico cómo restaurar una instancia previa (que ya esté funcionando) usando Visual Basic 2005, incluso si la instancia en ejecución está oculta o minimizada... que es de lo que se trata.


Introducción:

Como seguramente sabrás, Visual Basic 2005 permite que sea el propio runtime el que se encargue de comprobar si nuestra aplicación ya está funcionando, y en caso de que se intente abrir nuevamente el programa, no se abra, es lo que se conoce como aplicaciones de instancia única.

El problema que algunas veces nos surge es que si la instancia que está funcionando está minimizada u oculta, pues no se ve... dando un efecto poco agradable al usuario, ya que ve cómo pulsa en el acceso directo de nuestra aplicación, pero ésta no se muestra.

Para solucionar este problema y hacer que la aplicación se vea, y por tanto se muestre, podemos usar los eventos de la aplicación.

Para que te enteres mejor de qué es lo que estoy hablando, vamos a crear un proyecto "paso a paso" y te digo lo que hay que ir haciendo.

Crear el proyecto de prueba paso a paso

  1. Abre el Visual Studio 2005 (también vale el Visual Basic 2005 Express) y crea un nuevo proyecto de Visual Basic 2005 del tipo formulario de Windows.
    Dale como nombre: InstanciaUnica.
  2. Muestra las propiedades del proyecto (haciendo doble clic en My Proyect que está en la ventana del explorador de soluciones).
  3. De forma predeterminada te mostrará la ficha con las propiedades de la aplicación. En esa ficha, selecciona la opción Make single instance application (Convertir aplicación de instancia única), tal como se muestra en la figura 1 (como puedes comprobar, mi Visual Studio está en inglés).

Figura 1. Hacer la aplicación de instancia única
Figura 1. Hacer la aplicación de instancia única

  1. Después pulsa en el botón que hay abajo a la derecha de esa misma ficha y que en la figura 1 tiene el texto View Application Events (Ver eventos de aplicaciones).
  2. Eso mostrará una ventana de código en el que puedes escribir, pero en principio solo estará la definición de la clase, que se llama MyApplication.
  3. De la lista desplegable de la izquierda selecciona MyApplication Events y de la lista de la derecha selecciona el evento StartupNextInstance, tal como se ve en la figura 2.

Figura 2. Crear el evento para interceptar el inicio de otra instancia
Figura 2. Crear el evento para interceptar el inicio de otra instancia

  1. Eso creará un método llamado MyApplication_StartupNextInstance. Ahí es donde tendremos que escribir el código para que todo funcione como desearíamos.
  2. En ese método escribe el siguiente código (esto es suponiendo que no le has cambiado el nombre al formulario, si se lo has cambiado, en vez de Form1 usa el nombre que le hayas dado)
Private Sub MyApplication_StartupNextInstance( _
            ByVal sender As Object, _
            ByVal e As Microsoft.VisualBasic. _
                ApplicationServices.StartupNextInstanceEventArgs) _
            Handles Me.StartupNextInstance

    My.Forms.Form1.Size = My.Forms.Form1.RestoreBounds.Size
    My.Forms.Form1.Location = My.Forms.Form1.RestoreBounds.Location

    e.BringToForeground = True
    My.Forms.Form1.Show()

End Sub
  1. Las dos primeras líneas, del código de ese método, sirven para que se restaure al mismo tamaño y posición que tenía.
    Las dos últimas son para que se ponga en primer plano y se muestre, por si estaba oculta.
  2. Ahora compila la aplicación para poder probar que todo funciona como te digo.
  3. Para compilar la aplicación, en el menú Build (Generar) selecciona la primera opción que dirá algo como Build solution o Build InstanciaUnica (Generar InstanciaUnica).
  4. Busca el ejecutable (si estás usando el modo de no crear los proyectos de forma automática, deberías pulsar en guardar todo para que se guarde en la carpeta que le digas, seguramente tendrás que volver a generarla).
  5. Inicia la aplicación y minimízala (no la ejecutes desde el propio Visual Studio).
    Si estás usando la versión Express, casi seguro que el ejecutable está en la carpeta Release, si estás usando el Visual Studio 2005 normal, estará en la carpeta Debug.
    Fíjate de no iniciar la que se llama InstanciaUnica.vshost.exe, que esa no es.
  6. Vuelve a pulsar en la aplicación para volver abrirla. Verás que la que estaba minimizada se muestra y solo hay una aplicación funcionando.
  7. Esto mismo vale si la ocultas, por ejemplo para que se muestre el icono en la barra de tareas (junto al reloj) cuando está minimizada.

 

Pulsa aquí para ver una versión en la que se usa un NotifyIcon, y en la que se oculta la aplicación al minimizarla.

 

Abajo del todo tienes el fichero comprimido con el código fuente pero recuerda que solo es para Visual Basic 2005, incluso la versión Express.

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

 


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

System.Windows.Forms
Microsoft.VisualBasic

 


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: InstanciaUnica.rar - 11.50 KB

(MD5 checksum: 35E0BBB4AAE08994F6AAE4736A77FFCF)

 


Ir al índice principal de el Guille

Valid XHTML 1.0 Transitional ¡CSS Válido!