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
- 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.
- Muestra las propiedades del proyecto (haciendo doble clic en My
Proyect que está en la ventana del explorador de soluciones).
- 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
- 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).
- 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.
- 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
- Eso creará un método llamado MyApplication_StartupNextInstance.
Ahí es donde tendremos que escribir el código para que todo funcione
como desearíamos.
- 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
- 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.
- Ahora compila la aplicación para poder probar que todo funciona como te
digo.
- 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).
- 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).
- 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.
- 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.
- 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
|